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