3052. 道路与航线
时间限制:2000 MS 内存限制:64 MB
题目描述
## 题目描述 农夫约翰正在一个新的销售区域对他的牛奶销售方案进行调查。 他想把牛奶送到$T$ 个城镇,编号为$1∼T$。 这些城镇之间通过 $R$ 条道路 (编号为 $1$ 到 $R$) 和 $P$ 条航线 (编号为 $1$ 到 $P$) 连接。 每条道路 $i$ 或者航线 $i$ 连接城镇 $Ai$ 到 $Bi$,花费为 $Ci$。 对于道路,$0\leCi\le10,000$;然而航线的花费很神奇,花费 $Ci$ 可能是负数($-10,000\leCi\le10,000$)。 道路是双向的,可以从 $Ai$到 $Bi$,也可以从 $Bi$ 到 $Ai$,花费都是 $Ci$。 然而航线与之不同,只可以从 $Ai$到 $Bi$。 事实上,由于最近恐怖主义太嚣张,为了社会和谐,出台了一些政策:保证如果有一条航线可以从$Ai$ 到 $Bi$,那么保证不可能通过一些道路和航线从 $Bi$ 回到 $Ai$。 由于约翰的奶牛世界公认十分给力,他需要运送奶牛到每一个城镇。 他想找到从发送中心城镇 $S$ 把奶牛送到每个城镇的最便宜的方案。 ## 输入格式 第一行包含四个整数 $T,R,P,S$。 接下来 $R$ 行,每行包含三个整数(表示一个道路)$Ai,Bi,Ci$。 接下来 $P$ 行,每行包含三个整数(表示一条航线)$Ai,Bi,Ci$。 ## 输出格式 第 $1..T$ 行:第 $i$ 行输出从 $S$ 到达城镇 $i$ 的最小花费,如果不存在,则输出 `NO PATH`。 ## 输入 ```in1 6 3 3 4 1 2 5 3 4 5 5 6 10 3 5 -100 4 6 -100 1 3 -10 ``` ## 输出 ```out1 NO PATH 5 0 -95 -100 ``` ## 提示 ## 说明 一共六个城镇。在 1 和 2,3 和 4,5 和 6 之间有道路,花费分别是 5,5,10。同时有三条航线:3\to5,4\to6 和 1\to3,花费分别是 -100,-100,-10。FJ 的中心城镇在城镇 4。FJ 的奶牛从 4 号城镇开始,可以通过道路到达 3 号城镇。然后他们会通过航线达到 5 和 6 号城镇。但是不可能到达 1 和 2 号城镇。 ## 数据范围 对于全部数据,1\leT\le2.5\times10^4,1\leR,P\le5\times10^4,1\leAi,Bi,S\leT。保证对于所有道路,0\leCi\le10^4,对于所有航线,-10^4\leCi\le10^4 。