洛谷
P3386 【模板】二分图最大匹配
#include<bits/stdc++.h>
using namespace std;
int mp[505][505],m,n,e,used[505],link[505];
bool dfs(int i){
for(int j=1;j<=n;j++){
if(mp[i][j]&&!used[j]){
used[j]=1;
if(link[j]==-1||dfs(link[j])){//若j没有匹配或者j能找到其他匹配的人
link[j]=i; //则将i匹配给j
return 1;
}
}
}
return 0;
}
void hungary(){
int res=0;
for(int i=1;i<=m;i++){
memset(used,0,sizeof(used));
if(dfs(i))res++;
}
cout<<res<<endl;
}
int main(){
ios::sync_with_stdio(0);
int u,v;
cin>>m>>n>>e;
while(e--){
cin>>u>>v;
mp[u][v]=1;
}
memset(link,-1,sizeof(link));
hungary();
}