AcWing 861. 二分图的最大匹配
原题链接
简单
作者:
minux
,
2020-04-28 12:02:35
,
所有人可见
,
阅读 607
#include <bits/stdc++.h>
using namespace std;
const int N=505;
const int M=1e5+5;
vector<int> G[N];
int n1,n2,m;
int match[N];
bool vis[N];
bool Find(int v){
for(auto &node: G[v]){
if(!vis[node]){
vis[node]=true;
if(!match[node] || Find(match[node])){ // 如果node为被匹配或者node的匹配可以找到其他匹配, 则为当前v设置匹配为node
match[node]=v;
return true;
}
}
}
return false;
}
int main(){
cin>>n1>>n2>>m;
int x,y;
while(m--){
cin>>x>>y;
G[x].push_back(y); // 存储二分图的边关系
}
int res=0;
for(int i=1; i<=n1; ++i){ // 考虑从左向右进行匹配
memset(vis, 0x00, sizeof vis);
if(Find(i)) ++res;
}
cout<<res<<endl;
return 0;
}