题目链接
HDU 4857
方法:反向拓扑排序(BFS+优先队列)
题目分析
解析
本题目不是单纯的拓扑排序,主要关注这句话:
负责人现在可以安排大家排队的顺序,由于收了好处,所以他要让1号尽量靠前,如果此时还有多种情况,就再让2号尽量靠前,如果还有多种情况,就让3号尽量靠前,以此类推。
因为拓扑排序是正向排序,如果要满足上面的条件,则需要使用priority_queue反向建图再反向输出。
拓扑排序(BFS版)个人理解
将所有入度为0的点全都push进队列,然后对队列中的每一个点u执行两个操作。1.将其排入topo数组之中,2.找对应的临接点v,并将这条边删除(表现为将v的入度减一),如果此时v的入度为0了,则将v点Push进队列。当队列为空时,topo数组即为排好序的序列。
代码
1 |
|