题目背景
二分图
感谢@一扶苏一 提供的hack数据
题目描述
给定一个二分图,结点个数分别为n,m,边数为e,求二分图最大匹配数
输入格式
第一行,n,m,e
第二至e+1行,每行两个正整数u,v,表示u,v有一条连边
输出格式
共一行,二分图最大匹配
输入输出样例
输入 #1复制
1 1 1 1 1
输出 #1复制
1
#include<bits/stdc++.h>
using namespace std;
const int M=1e3+5;
int d[M][M],v[M],n,m,e,match[M];
bool dfs(int x){
for(int i=1;i<=m;i++){
if(d[x][i]&&!v[i]){
v[i]=1;
if(!match[i]||dfs(match[i])){
match[i]=x;
return 1;
}
}
}
return 0;
}
int main(){
scanf("%d%d%d",&n,&m,&e);
for(int x,y,i=1;i<=e;i++){
scanf("%d%d",&x,&y);
if(x<=n&&y<=m)d[x][y]++;
}
int ans=0;
for(int i=1;i<=n;i++){//从第一个点进行匹配
memset(v,0,sizeof(v));
if(dfs(i))ans++;
}
printf("%d",ans);
return 0;
}