#P0072. [2024 蜀山区小学] 市场价格(price)

[2024 蜀山区小学] 市场价格(price)

题目描述

小明去西部旅游,路过一处沙漠,其中有三处绿洲,将它们分别编号为 1,2,31,2,3。绿洲 ii 的水价为每升水 pip_i 元。可以将水从绿洲 ii 运到绿洲 jj,运输成本是每升水 cijc_{ij} 元;运输过程可以直达也可以中转,例如,要从绿洲 11 运输到绿洲 33,路线可以是 131 \to 3 或者 1231 \to 2 \to 3。由于水在各个绿洲的价格不同,因此有机会通过在绿洲 ii 买入一些水,再到绿洲 jj 卖出来获利,这样做所能获得的利润就是:绿洲 jj 的水价 - 绿洲 ii 的水价 - 运输成本。

请帮小明通过合理地选择买卖地点和运输路线找到每升水的利润最大的路线。如果这样的路线有多条,优先选择起点(买入点)编号最小的路线;如果仍然有多条,优先选择终点(卖出点)编号最小的路线;如果仍然有多条,优先选择长度最短的路线。

输入格式

第一行包含 33 个正整数 pip_i,其中第 ii 个数表示绿洲 ii 的每升水的价格。
接下来 33 行,其中第 ii 行第 jj 个数为 cijc_{ij},表示从绿洲 ii 直达绿洲 jj 的每升水运输成本。

输出格式

第一行一个整数表示每升水最大利润。
接下来一行描述运输路线,依次输出经过的绿洲编号(包含起点和终点)。

输入数据#1

100 200 300  
0 120 180  
50 0 70  
100 100 0  

输出数据#1

30  
2 3  

解释#1

将水从绿洲 22 运到绿洲 33 所能获得的利润是 30020070=30300 - 200 - 70 = 30。不存在利润更高的路线。

输入数据#2

100 200 300  
0 120 170  
50 0 70  
100 100 0  

输出数据#2

30  
1 3  

解释#2

获利为 3030 的路线有 131 \to 3232 \to 3 两条,根据优先规则选择 131 \to 3

输入数据#3

100 200 300  
0 90 170  
50 0 70  
100 100 0  

输出数据#3

40  
1 2 3  

解释#3

将水从绿洲 11 经过绿洲 22 运到绿洲 33 所能获得的利润是 300100(90+70)=40300 - 100 - (90 + 70) = 40

数据范围

对于全部数据,有 1pi100001 \le p_i \le 100000cij100000 \le c_{ij} \le 10000cii=0c_{ii} = 0,至少存在一条利润为正的路线。
测试点 141 \sim 4(共 4040 分):利润最大的路线是唯一的。
测试点 5105 \sim 10(共 6060 分):无特殊限制。