hdu 2063 赤裸裸的匈牙利算法

题目没啥说的,赤裸裸的匈牙利算法,可恶的是题目输入描述不清,还以为每组输入后都有一个0呢,害得我RE了一次,鄙视一下出题者,哈哈!

/*
* hdu2063/linux.cpp
* Created on: 2011-9-1
* Author : ben
*/
#include
<cstdio>
#include
<cstdlib>
#include
<cstring>
#include
<cmath>
#include
<algorithm>
usingnamespace std;

constint MAXN =555;

int n, m, match[MAXN];
bool visit[MAXN], map[MAXN][MAXN];

bool dfs(int k) {
int t;
for (int i =0; i < m; i++) {
if (map[k][i] &&!visit[i]) {
visit[i]
=true;
t
= match[i];
match[i]
= k;
if (t ==-1|| dfs(t)) {
returntrue;
}
match[i]
= t;
}
}
returnfalse;
}

void work() {
int K, t1, t2, ans;
while (scanf("%d%d%d", &K, &n, &m) ==3) {
memset(map,
false, sizeof(map));
for (int i =0; i < K; i++) {
scanf(
"%d%d", &t1, &t2);
map[t1
-1][t2 -1] =true;
}
memset(match,
-1, sizeof(match));
ans
=0;
for(int i =0; i < n; i++) {
memset(visit,
false, sizeof(visit));
if(dfs(i)) {
ans
++;
}
}
printf(
"%d\n", ans);
}
}

int main() {
#ifndef ONLINE_JUDGE
freopen(
"data.in", "r", stdin);
#endif
work();
return0;
}
原文地址:https://www.cnblogs.com/moonbay/p/2161609.html