HDU 1285 确定比赛名次

#include <cstdio>

int main() {
	int n, m, x, y;
	while (scanf("%d%d", &n, &m) != EOF) {
	int arr[505][505] = {0}, indegree[505] = {0};
		for (int i = 0; i < m; i++) {
			scanf("%d%d", &x, &y);
			if (arr[x][y] == 0) {  //避免 A 队伍输给 B 队伍多次所以引发的排序出错
				arr[x][y] = 1;
				indegree[y]++;
			}
		}

		for (int i = 1; i <= n; i++)
			for (int j = 1; j <= n; j++)
				if (indegree[j] == 0) { //寻找输了 0 场比赛的队伍,他就是排在队列的头
					indegree[j]--;
					printf(i == n ? "%d\n" : "%d ", j);
					for (int k = 1; k <= n; k++)
						if (arr[j][k] == 1) //寻找除了输给排在排在的头,输了 0 场比赛的队伍他就是跟在头后面的那个
							indegree[k]--;
					break;
				}
	}
	return 0;
}


你可能感兴趣的:(HDU 1285 确定比赛名次)