传送门
二分图匹配裸题。
#include<cmath>
#include<cstdio>
#include<cstdlib>
#include<cstring>
#include<algorithm>
#include<iostream>
#define ll long long
using namespace std;
int n,m,x,y,ans;
int a[1005][1005],b[1005],lk[1005];
bool dfs(int x){
for (int i=0;i<n;i++)
if (!b[i]&&a[x][i]){
b[i]=1;
if (!lk[i]||dfs(lk[i])){
lk[i]=x;
return 1;
}
}
return 0;
}
int main(){
scanf("%d%d",&n,&m);
for (int i=1;i<=m;i++){
scanf("%d%d",&x,&y);
a[i][x]=a[i][y]=1;
}
ans=0;
for (int i=1;i<=m;i++){
memset(b,0,sizeof(b));
if (dfs(i)) ans++;
else break;
}
printf("%d",ans);
return 0;
}