演算法提高 道路和航路

2021-09-12 01:38:00 字數 1717 閱讀 9743

演算法提高 道路和航路

演算法提高 道路和航路  

時間限制: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...