[USACO 2011Jan Gold]道路与航线

4 篇文章 0 订阅

Farmer John正在一个新的销售区域对他的牛奶销售方案进行调查。他想把牛奶送到T个城镇 (1 <= T <= 25,000),编号为1T。这些城镇之间通过R条道路 (1 <= R <= 50,000,编号为1到R) 和P条航线 (1 <= P <= 50,000,编号为1到P) 连接。每条道路i或者航线i连接城镇A_i (1 <= A_i <= T)到B_i (1 <= B_i <= T),花费为C_i。对于道路,0 <= C_i <= 10,000;然而航线的花费很神奇,花费C_i可能是负数(-10,000 <= C_i <= 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 <= S <= T) 把奶牛送到每个城镇的最便宜的方案,或者知道这是不可能的。 

**********************************************************************************************************************

Input Format
* 第1行:四个空格隔开的整数: T, R, P, and S 
* 第2到R+1行:三个空格隔开的整数(表示一条道路):A_i, B_i 和 C_i 
* 第R+2到R+P+1行:三个空格隔开的整数(表示一条航线):A_i, B_i 和 C_i 

**********************************************************************************************************************

Output Format

* 第1到T行:从S到达城镇i的最小花费,如果不存在输出"NO PATH"。 

**********************************************************************************************************************

Sample Input

6 3 3 4

1 2 5

3 4 5

5 6 10

3 5 -100

4 6 -100

1 3 -10

**********************************************************************************************************************

Sample Output

NO PATH
NO PATH
5
0
-95
-100

 

 

 

 

 

 

 

 

 

题意:

给定一个图,有两种边,一种是有向,权值可正可负;另一种无向,权值恒为正;图满足,若a到b有一条有向边,不存在b到a的路。给一个点,求这个点到所有点最短路。

大致思路:

按无向边缩点成一个拓补图,作拓补排序,对于每个拓补点,肯定不会有连续的两段有向边,所以可以用dijkstra。

代码:

 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值