二分图最大匹配匈牙利算法。
#include"cstdio" #include"cctype" #include"vector" using namespace std; int read() { int c,x=0; while(!isdigit(c=getchar())); while(x=x*10+c-‘0‘,isdigit(c=getchar())); return x; } vector<int> e[1001]; int cos[1001],vis[1001]; bool find(int o,int t) { for(int i=0; i<e[o].size(); i++) if(vis[e[o][i]]!=t) { vis[e[o][i]]=t; if(!cos[e[o][i]] || find(cos[e[o][i]],t)) { cos[e[o][i]]=o; return 1; } } return 0; } int main() { int n=read(),m=read(),ans=0; for(int i=1; i<=m; i++) { e[i].push_back(read()); e[i].push_back(read()); } for(int i=1; i<=m; i++) if(find(i,i)) ++ans; else break; printf("%d",ans); return 0; }