bzoj1191--匈牙利算法

时间:2023-03-08 16:56:46

这道题一看就是求二分图最大匹配,不过需要注意的是答案需要前面所有题目都能答对,因为这里WA了无数次......

#include<iostream>
#include<cstdio>
#include<cstring>
using namespace std;
int tot,a[][],i,j,n,m,k,f[],x,y;
bool b[],flag=;
bool dfs(int x){
b[x]=;
if(!f[a[x][]]){
f[a[x][]]=x;
return ;
}
if(!b[f[a[x][]]]&&dfs(f[a[x][]])){
f[a[x][]]=x;
return ;
}
if(!f[a[x][]]){
f[a[x][]]=x;
return ;
}
if(!b[f[a[x][]]]&&dfs(f[a[x][]])){
f[a[x][]]=x;
return ;
}
return ;
}
int main()
{
scanf("%d%d",&m,&n);
for(i=;i<=n;++i)scanf("%d%d",&a[i][],&a[i][]);
for(i=;i<=n;++i){
memset(b,,sizeof(b));
if(!dfs(i)){
flag=;
break;
}
}
printf("%d\n",!flag?n:(i-));
return ;
}