P3008 [USACO11JAN] Roads and Planes G

题目描述

Farmer John 正在一个新的销售区域对他的牛奶销售方案进行调查。他想把牛奶送到 $T$ 个城镇($1 \le T \le 25,000$),编号为 $1$ 到 $T$。这些城镇之间通过 $R$ 条道路($1 \le R \le 50,000$,编号为 $1$ 到 $R$)和 $P$ 条航线($1 \le P \le 50,000$,编号为 $1$ 到 $P$)连接。每条道路 $i$ 或者航线 $i$ 连接城镇 $A_i$($1 \le A_i \le T$)到 $B_i$($1 \le B_i \le T$),花费为 $C_i$。 对于道路 $0 \le C_i \le 10,000$;然而航线的花费很神奇,花费 $C_i$ 可能是负数($-10,000 \le C_i \le 10,000$)。道路是双向的,可以从 $A_i$ 到 $B_i$,也可以从 $B_i$ 到 $A_i$,花费都是 $C_i$。然而航线与之不同,只可以从 $A_i$ 到 $B_i$。 事实上,由于最近恐怖主义太嚣张,为了社会和谐,出台了一些政策保证:如果有一条航线可以从 $A_i$ 到 $B_i$,那么保证不可能通过一些道路和航线从 $B_i$ 回到 $A_i$。由于 FJ 的奶牛世界公认十分给力,他需要运送奶牛到每一个城镇。他想找到从发送中心城镇 $S$($1 \le S \le T$)把奶牛送到每个城镇的最便宜的方案,或者知道这是不可能的。

输入格式

共 $R+P+1$ 行。 第 $1$ 行:四个整数 $T,R,P$ 和 $S$,分别表示城镇的数量,道路的数量,航线的数量和中心城镇。 第 $2$ 到 $R+1$ 行:每行三个整数 $A_i,B_i$ 和 $C_i$,描述一条道路。 第 $R+2$ 到 $R+P+1$ 行:每行三个整数 $A_i,B_i$ 和 $C_i$,描述一条航线。

输出格式

共 $T$ 行,第 $i$ 行输出城市 $S$ 到城市 $i$ 的最小花费。如果不能到达,输出 `NO PATH`。

说明/提示

共有 $6$ 个城镇。城镇 $1$ 与 $2$、$3$ 与 $4$、$5$ 与 $6$ 之间分别有道路相连,花费分别为 $5$、$5$ 和 $10$;有航线从城镇 $3$ 飞往城镇 $5$、从城镇 $4$ 飞往城镇 $6$、从城镇 $1$ 飞往城镇 $3$,花费分别为 $-100$、$-100$ 和 $-10$。发送中心城镇为 $4$ 号城镇。 FJ 的奶牛从 $4$ 号城镇出发,可以通过道路到达 $3$ 号城镇。她们可以乘坐从 $3$ 号和 $4$ 号城镇出发的航线到达 $5$ 号和 $6$ 号城镇。然而,没有办法到达 $1$ 号和 $2$ 号城镇,因为她们无法乘坐从 $1$ 号到 $3$ 号的航班反向飞行(即无法从 $3$ 号飞回 $1$ 号)。