#503. 道路与航线

道路与航线

题目描述

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

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

这些城镇之间通过 R 条道路 (编号为 1 到 R) 和 P 条航线 (编号为 1 到 P) 连接。 每条道路i或者航线i连接城镇 Aᵢ 到 Bᵢ,花费为 Cᵢ。

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

道路是双向的,可以从 Aᵢ 到 Bᵢ,也可以从 Bᵢ 到 Aᵢ,花费都是 Cᵢ。

然而航线与之不同,只可以从 Aᵢ 到 Bᵢ。

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

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

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

输入

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

接下来 R 行,每行包含三个整数(表示一个道路)Aᵢ,Bᵢ,Cᵢ。

接下来 P 行,每行包含三个整数(表示一条航线)Aᵢ,Bᵢ,Cᵢ。

输出

第 1..T 行:第 i 行输出从 S 到达城镇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

数据范围

1≤T≤25000, 1≤R, P≤50000, 1≤Aᵢ,Bᵢ, S≤T

每个测试用例时间限制1s,内存限制256MB。