当前位置: 代码迷 >> 综合 >> 『floyed最短路·矩阵乘法优化』relays
  详细解决方案

『floyed最短路·矩阵乘法优化』relays

热度:72   发布时间:2023-12-17 11:01:00.0

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?