文章
5
粉丝
495
获赞
1
访问
44.7k
思路分析:
本题的题意是根据每行输入的部分次序关系,从而还原整个比赛程序的次序关系。刻画问题时,可以将队编号用结点表示,对之间的次序关系用有向边表示,那么每行输入的P1,P2表示P1队赢了P2队,就可以表示为P1→P2。这样M行的输入数据实际上就是给出的M条有向边。这样问题的全局表示就刻画出来了,实际上是一张有向无环图。接下来确定全局次序关系的思路是,每一步扫描所有没有前驱结点的结点,这些结点是“候选第1名”,从中选取序号最小的,计入结果列表,它就是全局第1名,然后将此结点从图中删除,并把该结点发出的所有边删除。重复此过程直至所有边删除完毕,最后剩余的结点再按照标号从小到大排序,并入到结果列表中
实现方法:
参考程序:
def Out(ls):
for i in range(len(ls) - 1):
print(ls[i], end=" ")
print(ls[-1])
while True:
try:
N, M = map(int, input().split())
pre_dic = {}
next_dic = {}
for i in range(1, N + 1):
pre_dic[i] = []
next_dic[i] = []
for i in range(M):
a, b = map(int, input().split())
pre_dic[b]....
登录后发布评论
暂无评论,来抢沙发