#zDLybttg030301. 1503:道路和航线
1503:道路和航线
1503:道路和航线
题目描述
Farmer John 正在一个新的销售区域对他的牛奶销售方案进行调查。他想把牛奶送到 个城镇,编号为 到 。这些城镇之间通过 条道路(编号为 到 )和 条航线(编号为 到 )连接。每条道路 或者航线 连接城镇 到 ,花费为 。
对于道路,,然而航线的花费可能是负数。道路是双向的,可以从 到 ,也可以从 到 ,花费都是 。然而航线与之不同,只可以从 到 。
事实上,由于最近恐怖主义太嚣张,为了社会和谐,出台了一些政策保证:如果有一条航线可以从 到 ,那么保证不可能通过一些道路和航线从 回到 。由于 FJ 的奶牛世界公认十分给力,他需要运送奶牛到每一个城镇。他想找到从发送中心城镇 把奶牛送到每个城镇的最便宜的方案,或者知道这是不可能的。
输入格式
第一行为四个空格隔开的整数:;
第二到第 行:三个空格隔开的整数(表示一条道路): 和 ;
第 到 行:三个空格隔开的整数(表示一条航线): 和 。
输出格式
输出 行,第 行表示到达城镇 的最小花费,如果不存在输出 NO PATH。
样例
样例输入 #1
6 3 3 4
1 2 5
3 4 5
5 6 10
3 5 -100
4 6 -100
1 3 -10
样例输出 #1
NO PATH
NO PATH
5
0
-95
-100
样例解释 #1
- 个城镇, 条道路, 条航线,起点 。
- 道路(双向,费用非负):
- ,费用
- ,费用
- ,费用
- 航线(单向,费用可负):
- ,费用
- ,费用
- ,费用
从起点 出发:
- 到城镇 :无法到达。因为从 可以通过道路到 ,但从 只能通过航线到 ,无法到 。虽然有一条航线 ,但方向是 到 ,不能反向。所以输出
NO PATH。 - 到城镇 :同样无法到达,理由类似。
- 到城镇 :直接走道路 ,费用 。
- 到城镇 :起点,费用 。
- 到城镇 :路径 ,费用为 。
- 到城镇 :直接走航线 ,费用 。
数据范围
- 对于所有道路,
- 对于所有航线,
时空限制
- 时间限制:1000 ms
- 内存限制:65536 KB
注意:本题需要处理带有负权边(航线)但无负环(题目保证航线不会形成环,结合道路和航线整体无环)的最短路问题。由于图规模较大,需要采用高效的算法,如缩点(将道路连接的部分缩成连通块)后拓扑排序 + DAG 上 DP 或使用优化版的 SPFA(如 SLF、LLL 优化)或 Dijkstra 配合适当的处理。