演算法提高 道路和航路
演算法提高 道路和航路
時間限制:1.0s 記憶體限制:256.0mb
問題描述
農夫約翰正在針對乙個新區域的牛奶配送合同進行研究。他打算分發牛奶到t個城鎮(標號為1..t),這些城鎮通過r條標號為(1..r)的道路和p條標號為(1..p)的航路相連。
每一條公路i或者航路i表示成連線城鎮ai(1<=a_i<=t)和bi(1<=bi<=t)代價為ci。每一條公路,ci的範圍為0<=ci<=10,000;由於奇怪的運營策略,每一條航路的ci可能為負的,也就是-10,000<=ci<=10,000。
每一條公路都是雙向的,正向和反向的花費是一樣的,都是非負的。
每一條航路都根據輸入的ai和bi進行從ai->bi的單向通行。實際上,如果現在有一條航路是從ai到bi的話,那麼意味著肯定沒有通行方案從bi回到ai。
農夫約翰想把他那優良的牛奶從配送中心送到各個城鎮,當然希望代價越小越好,你可以幫助他嘛?配送中心位於城鎮s中(1<=s<=t)。
輸入格式
輸入的第一行包含四個用空格隔開的整數t,r,p,s。
接下來r行,描述公路資訊,每行包含三個整數,分別表示ai,bi和ci。
接下來p行,描述航路資訊,每行包含三個整數,分別表示ai,bi和ci。
輸出格式
輸出t行,分別表示從城鎮s到每個城市的最小花費,如果到不了的話輸出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
資料規模與約定
對於20%的資料,t<=100,r<=500,p<=500;
對於30%的資料,r<=1000,r<=10000,p<=3000;
對於100%的資料,1<=t<=25000,1<=r<=50000,1<=p<=50000。
只過了80%資料
#include #include#include
#include
#define inf 0x3f3f3f
using
namespace
std;
const
int l = 200000
;struct
edgee[l*2
];int
t,r,p,s;
intm,dist[l];
bool
tag[l];
inthead[l];
void add_edge(int u,int v,int
w)bool spaf(int
v0) }}}
return
true;}
intmain()
for(int i=0;i)
for(int i=0;i)
m--;
spaf(s);
for(int i=1;i<=t;i++)
return0;
}
posted on
2017-05-02 20:33
asuml 閱讀(
...)
編輯收藏
演算法提高 道路和航路
演算法提高 道路和航路 時間限制 1.0s 記憶體限制 256.0mb 提交此題 錦囊1 錦囊2 問題描述 農夫約翰正在針對乙個新區域的牛奶配送合同進行研究。他打算分發牛奶到t個城鎮 標號為1.t 這些城鎮通過r條標號為 1.r 的道路和p條標號為 1.p 的航路相連。每一條公路i或者航路i表示成連...
演算法提高 道路和航路
演算法提高 道路和航路 時間限制 1.0s 記憶體限制 256 0mb 提交此題 錦囊1 錦囊2 問題描述 農夫約翰正在針對乙個新區域的牛奶配送合同進行研究。他打算分發牛奶到t個城鎮 標號為1.t 這些城鎮通過r條標號為 1.r 的道路和p條標號為 1 p 的航路相連。每一條公路i或者航路i表示成連...
道路和航路
演算法提高 道路和航路 時間限制 1.0s 記憶體限制 256.0mb 問題描述 農夫約翰正在針對乙個新區域的牛奶配送合同進行研究。他打算分發牛奶到t個城鎮 標號為1.t 這些城鎮通過r條標號為 1.r 的道路和p條標號為 1.p 的航路相連。每一條公路i或者航路i表示成連線城鎮ai 1 a i t...