题解 P3386 【【模板】二分图匹配】
分析
匈牙利算法
(所以EK会TLE是真的吗)
不知道上面的几篇题解为什么代码这么长
注释见代码
Code
#include<bits/stdc++.h>
using namespace std;
int n,m,e,arr[1010][1010],use[1010],B[1010],ip1,ip2,ans;
int find(int x)
{
for(int i=1;i<=m;i++)
{
if(arr[x][i]&&!use[i])//可以连边且没有被标记过
{
use[i]=1;//标记
if(!B[i]||find(B[i]))//若没有匹配或可以将原先匹配的转移
{
B[i]=x;//更改匹配
return 1;
}
}
}
return 0;
}
int main()
{
cin>>n>>m>>e;
for(int i=1;i<=e;i++)
{
cin>>ip1>>ip2;
if(ip1>n||ip2>m)//据说有毒瘤数据
continue;
arr[ip1][ip2]=1;
}
for(int i=1;i<=n;i++)
{
memset(use,0,sizeof(use));//每次初始化
if(find(i))
ans++;
}
cout<<ans;
}