/*
二分图匹配
匈牙利
by sbn
*/
#include<iostream>
#include<cstdio>
#include<cstring>
using namespace std;
bool map[1001][1001];
int n1,n2,m;
int flag[1001],vis[1001];
bool dfs(int x){
for (int i1=1;i1<=n2;i1++){
if (map[x][i1]&&!vis[i1]){
vis[i1]=1;
if (flag[i1]==0||dfs(flag[i1])){
flag[i1]=x;
return true;
}
}
}
return false;
}
int main(){
cin>>n1>>n2>>m;
for (int i=1;i<=m;i++)
{
int a,b;
cin>>a>>b;
if (a<=n1&&b<=n2)
map[a][b]=1;
}
int ans=0;
for (int i=1;i<=n1;i++)
{
memset(vis,0,sizeof(vis));
if (dfs(i)) ans++;
}
cout<<ans<<endl;
}
二分图匹配(匈牙利算法)
最新推荐文章于 2024-03-13 17:01:13 发布