P r o b l e m \mathrm{Problem} Problem
FJ的N(2 <= N <= 1,000,000)头奶牛选择了接力跑作为她们的日常锻炼项目。至于进行接力跑的地点,自然是在牧场中现有的T(2 <= T <= 100)条跑道上。
农场上的跑道有一些交汇点,每条跑道都连结了两个不同的交汇点I1_i和I2_i(1 <= I1_i <= 1,000; 1 <= I2_i <= 1,000)。每个交汇点都是至少两条跑道的端点。奶牛们知道每条跑道的长度length_i(1 <= length_i <= 1,000),以及每条跑道连结的交汇点的编号。并且,没有哪两个交汇点由两条不同的跑道直 接相连。你可以认为这些交汇点和跑道构成了一张图。
为了完成一场接力跑,所有N头奶牛在跑步开始之前都要站在某个交汇点上(有些交汇点上可能站着不只1头奶牛)。当然,她们的站位要保证她们能够将接力棒顺次传递,并且最后持棒的奶牛要停在预设的终点。
你的任务是,写一个程序,计算在接力跑的起点(S)和终点(E)确定的情况下,奶牛们跑步路径可能的最小总长度。显然,这条路径必须恰好经过N条跑道。
S o l u t i o n \mathrm{Solution} Solution
我们可以设 f [ i ] [ j ] [ t ] f[i][j][t] f[i][j][t]表示i到j的最短路径中,经过 t t t条跑道的最短路径。
那么类似floyed的迭代方式,我们可以得到: f [ i ] [ j ] [ t ] = min ? ( f [ i ] [ k ] [ t ? 1 ] + f [ k ] [ j ] [ t ? 1 ] ) f[i][j][t]=\min(f[i][k][t-1]+f[k][j][t-1]) f[i][j][t]=min(f[i][k][t?