FZU - 2039 Pets

题目大意:给出 n 和 m,代表有 n 个人和 m 只狗,然后给出 e 表示 e 个关系,每个关系给出x  y,表示第 x 个人不会买第 y 条狗, 问说商店最多卖出多少条狗


解题思路:二分图匹配

#include <cstdio>
#include <cstring>
int n, m, e, line[105][105], pet[105], used[105];

bool find(int x) {
	for (int i = 1; i <= m; i++)
		if (line[x][i] && !used[i]) {
			used[i] = true;
			if (!pet[i] || find(pet[i])) {
				pet[i] = x;
				return true;
			}
		}
	return false;
}

int main() {
	int T;
	scanf("%d", &T);
	for (int cnt = 1; cnt <= T; cnt++) {
		memset(line, 1, sizeof(line));
		memset(pet, 0, sizeof(pet));
		scanf("%d%d%d", &n, &m, &e);

		int x, y, ans = 0;
		for (int i = 0; i < e; i++) {
			scanf("%d%d", &x, &y);
			line[x][y] = 0;
		}

		for (int i = 1; i <= n; i++) {
			memset(used, 0, sizeof(used));
			if (find(i))
				ans++;
		}
		printf("Case %d: %d\n", cnt, ans);
	}
	return 0;
}


你可能感兴趣的:(FZU - 2039 Pets)