您的位置:首页 > 其它

【模板】匈牙利算法——二分图最大匹配

2016-11-11 14:43 267 查看
#include <iostream>
#include<cstring>
#include<cstdio>
#include<cmath>
#define maxn 1000
using namespace std;

int nx,ny,match[maxn];
bool vis[maxn],w[maxn][maxn];

bool find(int x){
for(int i=1;i<=ny;i++){
if(vis[i]) continue;
vis[i]=true;
if(match[i]==-1||find(match[i])){
match[i]=x;
return true;
}
}
return false;
}

int suan(){
int ans=0;
memset(w,0,sizeof(w));
memset(match,-1,sizeof(match));
for(int i=1;i<=nx;i++){
memset(vis,0,sizeof(vis));
if(find(i)) ans++;
}
return ans;
}

int m,a,b;

int main(){
scanf("%d%d",&nx,&ny);
for(int i=1;i<=m;i++){
scanf("%d%d",&a,&b);
w[a][b]=true;
}
int out=suan();
if(out) printf("%d",out);
else puts("NO!!!!!");
return 0;
}
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签:  模板 二分图