HDU 1285 确定比赛名次(拓扑排序+略坑的条件)

本文介绍了一道HDU的图论题目,涉及拓扑排序的应用。题目要求根据比赛胜负关系确定所有队伍的排名,确保最小编号队伍在前。作者指出,由于特殊情况,单纯使用DFS和邻接表可能造成错误,建议使用邻接矩阵,并注意DFS的调用顺序、重边判断等关键点。文中还提供了正确解决方案和样例数据。
摘要由CSDN通过智能技术生成

题目大意

给出N个队伍,M个关系,P1 P2代表P1队在比赛中赢了P2队,要求输出所有队伍的名次关系,当有多种情况时,总是将序号最小的队伍排在前面。

解题思路

题目本来是一道很单纯的拓扑排序题,但是因为最后一句话的缘故使得自己莫名WA了N次,细节决定成败啊。。
对于传统的拓扑排序题是可以使用多种方式来写的,但是如果这道题你准备使用邻接表存关系,使用DFS来排序的话,恭喜你。。你已经WA一半了。。
首先普及一下拓扑排序的知识:
拓扑排序实际上是给出图的一系列偏序关系,求出图中所有顶点的全序关系的算法。对于有向无环图是适用的,也可以用来判断图中是否有环路存在。
但是拓扑排序求出的序列,如果不加以特殊规范的话,可能会存在多种情况。如图:

拓扑排序图示

该图的拓扑序列有两种表示方法,即ABCD和ACBD,如果在复杂一些,只要在拓扑序列中不存在直接的逆序关系则该序列都是合法的,这就导致情况的多样性。具体实现的过程中,初
  • 1
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值