------------------------------------------------------------------------------------
------------------------------------------------------------------------------------
开坑了...中考前看看能不能填完(总感觉会TJ...QwQ) TJ啦23333333
1.飞行员配对问题(二分图最大匹配
裸匈牙利。
#include<iostream> #include<cstdlib> #include<cstring> #include<cstdio> using namespace std; struct poi{int too,pre;}e[20000]; int link[210],last[210],v[210],x,y,n,m,tot,t,ans; void read(int &k) { k=0;int f=1;char c=getchar(); while(c<'0'||c>'9')c=='-'&&(f=-1),c=getchar(); while(c<='9'&&c>='0')k=k*10+c-'0',c=getchar(); k*=f; } void add(int x,int y){e[++tot].too=y;e[tot].pre=last[x];last[x]=tot;} bool dfs(int x) { for(int i=last[x],too=e[i].too;i;i=e[i].pre,too=e[i].too) if(v[too]!=t) { v[too]=t; if((!link[too])||dfs(link[too])) { link[too]=x; return 1; } } return 0; } int main() { read(n);read(m); read(x);read(y); while(x!=-1&&y!=-1) { add(y,x); read(x);read(y); } for(int i=n+1;i<=n+m+1;i++) { t++; if(dfs(i))ans++; } printf("%d\n",ans); for(int i=1;i<=n;i++) if(link[i])printf("%d %d\n",i,link[i]); }