匈牙利算法
#include<bits/stdc++.h>
using namespace std;
bool ver[1001][1001],v[1001];
int d[1001],n,m,e;
bool dfs(int x){
for(int i=1;i<=m;i++){
if(ver[x][i]&&!v[i]){
v[i]=1;
if(!d[i]||dfs(d[i])){
d[i]=x;return 1;
}
}
}
return 0;
}
void init(){
cin>>n>>m>>e;
for(int i=1;i<=e;i++){
int a,b;
cin>>a>>b;
if(b>m||a>n)continue;
ver[a][b]=1;
}
int ans=0;
for(int i=1;i<=n;i++){memset(v,0,sizeof(v));
ans+=dfs(i);
}
cout<<ans;
}
int main(){
init();
}