比赛 202110省实验桐柏一中普及组联赛 评测结果 AAAAAAAAAA
题目名称 分配同桌 最终得分 100
用户昵称 192837465j 运行时间 0.753 s
代码语言 C++ 内存使用 20.25 MiB
提交时间 2021-10-18 19:52:44
显示代码纯文本
#include<bits/stdc++.h>
using namespace std;

bool G[10000 + 5][10000 + 5], vis[10000 + 5];
int n, m, A[10000 + 5];

bool dfs(int x) {
	for(int i = 1; i <= n - m; i++) {
		if(G[x][i] && !vis[i]) {
			vis[i] = 1;
			if(!A[i] || dfs(A[i])) {
				A[i] = x;
				return true;
			}
		}
	}
	return false;
}

int main() {
	freopen("tongzhuo.in", "r", stdin);
	freopen("tongzhuo.out", "w", stdout);
	scanf("%d%d", &n, &m);
	int u, v;
	while(scanf("%d%d", &u, &v) == 2) {
		G[u][v - m] = 1;
	}
	int ans = 0;
	for(int i = 1; i <= m; i++) {
		memset(vis, 0, sizeof(vis));
		if(dfs(i)) ans++;
	}
//	for(int i = 1; i <= n - m; i++) printf("%d ", A[i]);
	printf("%d", ans);
	return 0;
}