关于二分图匹配:blog
code:
#include<cstdio>
#include<cstdlib>
#include<cstring>
#include<iostream>
#define N 2010
using namespace std;
int n,m,e,ans;
int vis[N][N];
int ask[N],matched[N];
inline bool found(int x){
for (int i = 1 ; i <= m ; i++)
if (vis[x][i]){
if (ask[i])
continue;
ask[i] = 1;
if (!matched[i] || found(matched[i])) {
matched[i] = x ;
return true;
}
}
return false;
}
inline void match(){
int cnt = 0;
memset(matched,0,sizeof(matched));
for (int i = 1 ; i <= n ; i++){
memset(ask,0,sizeof(ask));
if (found(i))
cnt++;
}
ans = cnt;
}
int main(){
scanf("%d%d%d",&n,&m,&e);
for (int i = 1 ; i <= e ; i++){
int x,y;
scanf("%d%d",&x,&y);
vis[x][y] = 1;
}
match();
printf("%d \n",ans);
return 0;
}