【模板】二分图匹配
水一波。
#include<iostream>
#include<cstdio>
using namespace std;
int n,m,e,head[2000010],cnt,ans,vis[2000010],f[2000010];
struct node{
int to,next;
}a[2000010];
void add(int x,int y){
a[++cnt].to=y,a[cnt].next=head[x],head[x]=cnt;
}
bool dfs(int u,int time){
for(int i=head[u],v;v=a[i].to,i;i=a[i].next)
if(vis[v]^time){
vis[v]=time;
if((!f[v])||dfs(f[v],time)){//若未被匹配或者能商量,就将两人匹配
f[v]=u;return true;
}
}
return false;
}
int main(){
scanf("%d%d%d",&n,&m,&e);
for(int i=1,a,b;i<=e;++i){
scanf("%d%d",&a,&b);
if(a>m||b>m) continue;
add(a,b);
}
for(int i=1;i<=n;++i)
if(dfs(i,i)) ans++;
printf("%d",ans);
return 0;
}
不如吃茶去