#3890. 道路与航线

道路与航线

题目描述

农夫约翰正在一个新的销售区域对他的牛奶销售方案进行调查。

他想把牛奶送到T T 个城镇,编号为 1∼TT

这些城镇之间通过 RR 条道路 (编号为 1 到 RR) 和 PP 条航线 (编号为 1 到 PP) 连接。

每条道路i i 或者航线 i_i 连接城镇 AiA_iBiB_i,花费为 CiC_i

对于道路,0Ci10,0000≤C_i≤10,000;然而航线的花费很神奇,花费 CiC_i 可能是负数(−10,000$≤C_i≤$10,000)。

道路是双向的,可以从 AiA_i BiB_i,也可以从 BiB_i AiA_i,花费都是Ci C_i

然而航线与之不同,只可以从Ai A_iBi B_i

事实上,由于最近恐怖主义太嚣张,为了社会和谐,出台了一些政策:保证如果有一条航线可以从 AiA_iBiB_i,那么保证不可能通过一些道路和航线从Bi B_i 回到Ai A_i

由于约翰的奶牛世界公认十分给力,他需要运送奶牛到每一个城镇。

他想找到从发送中心城镇S S 把奶牛送到每个城镇的最便宜的方案。

输入格式

第一行包含四个整数 T,R,P,ST,R,P,S

接下来R R 行,每行包含三个整数(表示一个道路)Ai,Bi,CiA_i,B_i,C_i

接下来 PP 行,每行包含三个整数(表示一条航线)Ai,Bi,CiA_i,B_i,C_i

输出格式

第 1..TT 行:第 ii 行输出从 SS 到达城镇i i 的最小花费,如果不存在,则输出 NO PATH

样例

6 3 3 4
1 2 5
3 4 5
5 6 10
3 5 -100
4 6 -100
1 3 -10
NO PATH
NO PATH
5
0
-95
-100

数据范围

1T25000,1R,P50000,1A,Bi,ST1≤T≤25000, 1≤R,P≤50000,1≤A_,B_i,S≤T

来源

  • BZOJ2200
  • 算法竞赛进阶指南