您的位置:首页 > 其它

ZOJ 1364 Machine Schedule(二分图最大匹配)

2013-05-07 22:44 393 查看
最小顶点覆盖 = 二分图最大匹配

#include <iostream>
#include <memory.h>
#include <cstdio>
using namespace std;
const int maxn = 211;
int g[maxn][maxn], n, m, k;
char vis[maxn], fa[maxn];
bool dfs(int u){
for (int i = 1; i <= n + m; ++i){
if(g[u][i] && !vis[i]){
vis[i] = 1;
if(fa[i] == 0 || dfs(fa[i])){
fa[i] = u;
return true;
}
}
}
return false;
}
int hungary(){
int ans = 0;
memset(fa, 0, sizeof(fa));
for (int i = 1; i <= n; ++i){
memset(vis, 0, sizeof(vis));
if(dfs(i)){
ans++;
}
}
return ans;
}
int main(){
while (scanf("%d", &n) && n){
scanf("%d %d", &m, &k);
memset(g, 0, sizeof(g));
for (int i = 0 ; i < k; ++i){
int id, ma, mb;
scanf("%d %d %d", &id, &ma, &mb);
if(ma * mb ){
g[ma][n + mb] = g[n + mb][ma]=1; //机器1的模式 和机器2的模式建边
}
}
printf("%d\n",hungary());
}
return 0;
}
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: