来源:Luogu P1685,JZOJ #333
题目描述
顺利通过了黄药师的考验,下面就可以尽情游览桃花岛了!
你要从桃花岛的西头开始一直玩到东头,然后在东头的码头离开。可是当你游玩了一次后,发现桃花岛的景色实在是非常的美丽!!!于是你还想乘船从桃花岛东头的码头回到西头,再玩一遍,但是桃花岛有个规矩:你可以游览无数遍,但是每次游玩的路线不能完全一样。
我们把桃花岛抽象成了一个图,共 n n n 个点代表路的相交处, m m m 条边表示路,边是有向的(只能按照边的方向行走),且可能有连接相同两点的边。输入保证这个图没有环,而且从西头到东头至少存在一条路线。两条路线被认为是不同的当且仅当它们所经过的路不完全相同。
你的任务是:把所有不同的路线游览完一共要花多少时间?
解题思路
- 这是一道较为综合的题,囊括拓扑排序和递推,是一道经典的好题;
- 首先,求一个拓扑序,存在队列 q q q 中,然后在暴力枚举递推一遍, T o t a l [ i ] Total[i] Total[i] 表示走到第 i i i 个点的方案数, T i m e s [ i ] Time_s[i] Times[i] 表示走到第 i i i 个点花费的时间;
- 可得两个递推公式
Total[y]=(Total[x]