本文共 1540 字,大约阅读时间需要 5 分钟。
为了解决这个问题,我们需要根据每场比赛的结果确定队伍的排名。每场比赛的结果给出的是P1赢了P2,即P1在P2之前。我们可以使用拓扑排序来解决这个问题,因为它能帮助我们确定节点之间的顺序。
import sysfrom collections import dequedef determine_ranking(): while True: try: n, m = map(int, sys.stdin.readline().split()) adj = [[] for _ in range(n + 1)] in_degree = [0] * (n + 1) for _ in range(m): p1, p2 = map(int, sys.stdin.readline().split()) adj[p1].append(p2) in_degree[p2] += 1 queue = deque() for i in range(1, n + 1): if in_degree[i] == 0: queue.append(i) order = [] while queue: u = queue.popleft() order.append(u) for v in adj[u]: in_degree[v] -= 1 if in_degree[v] == 0: queue.append(v) print(' '.join(map(str, order))) except: breakif __name__ == "__main__": determine_ranking() sys.stdin.readline读取输入,处理多个测试用例。adj和入度数组in_degree来表示有向图。这个方法确保了我们能够正确地确定队伍的排名,并且在有多个符合条件的排名时,选择编号小的队伍排在前面。
转载地址:http://upgiz.baihongyu.com/