与裸的二分图最大匹配有些不同,但依然可以用匈牙利算法解决.
AC code:
#include <cstdio>
#include <cstring>
const int N=10010;
int n,m,ans;
int lk[N];
int G[N][2];
bool h[N];
bool find(int x){
for(int i=0;i<=1;i++){
int y=G[x][i];
if(!h[y]){
h[y]=1;
if(!lk[y]||find(lk[y])){
lk[y]=x;
return 1;
}
}
}
return 0;
}
int main(){
scanf("%d%d",&n,&m);
for(int i=1;i<=m;i++) scanf("%d%d",&G[i][0],&G[i][1]);
for(int i=1;i<=m;i++){
memset(h,0,sizeof(h));
if(find(i)) ans++;
else break;
}
printf("%d",ans);
return 0;
}