農夫約翰正在乙個新的銷售區域對他的牛奶銷售方案進行調查。
他想把牛奶送到t個城鎮,編號為1~t。
這些城鎮之間通過r條道路 (編號為1到r) 和p條航線 (編號為1到p) 連線。
每條道路 ii 或者航線 ii 連線城鎮ai到bi,花費為ci。
對於道路,0≤ci≤10,0000≤ci≤10,000;然而航線的花費很神奇,花費cici可能是負數(−10,000≤ci≤10,000)。
道路是雙向的,可以從ai到bi,也可以從bi到ai,花費都是ci。
然而航線與之不同,只可以從ai到bi。
事實上,由於最近恐怖主義太囂張,為了社會和諧,出台了一些政策:保證如果有一條航線可以從ai到bi,那麼保證不可能通過一些道路和航線從bi回到ai。
由於約翰的奶牛世界公認十分給力,他需要運送奶牛到每乙個城鎮。
他想找到從傳送中心城鎮s把奶牛送到每個城鎮的最便宜的方案。
輸入格式
第一行包含四個整數t,r,p,s。
接下來r行,每行包含三個整數(表示乙個道路)ai,bi,ci。
接下來p行,每行包含三個整數(表示一條航線)ai,bi,ci。
輸出格式
第1..t行:第i行輸出從s到達城鎮i的最小花費,如果不存在,則輸出「no path」。
資料範圍
1≤t≤25000,
1≤r,p≤500001≤r,
1≤ai,bi,s≤t1≤ai,,
輸入樣例:
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 path50
-95-100
這個題其實就是乙個最短路,但是可能有負環,負邊權
兩種方法,連通塊dijkstra+拓撲序 或者 spfa+雙端佇列優化(我是寫的第二種)
#include #include #include #include #include #include using namespace std;
const int maxn=25000+5,maxm=150000+5,inf=0x3f3f3f3f;
int e[maxm],ne[maxm],h[maxm],w[maxm],idx,dis[maxn];
int n,r,p,s;
bool st[maxn];
void add(int a,int b,int c)
void spfa(int root)
}} }
}int main()
return 0;
}
道路和航線
試題描述 farmer john 正在乙個新的銷售區域對他的牛奶銷售方案進行調查。他想把牛奶送到 t 1 t 2.5 10 4 個城鎮 編號為 1 到 t。這些城鎮之間通過 r 條道路 編號為 1 到 r 和 p 條航線 編號為 1 到 p 連線。每條道路 i 或者航線 i 連線城鎮 ai到 bi,...
道路和航線
題目描述 一張圖,有由t個節點,r條雙向邊和p條單向邊組成,每條邊有邊權且可能存在負權,求能否從s到達每個節點並且輸出最小花費。思路首先第一想法,把這張圖建出來,在跑一遍spfa即可,然而它顯然被卡了,不過似乎可以用雙端佇列優化水過去。接下就是正解。我們考慮對於所有的道路,都是正權,我們可以用dij...
AcWing 342 道路與航線
農夫約翰正在乙個新的銷售區域對他的牛奶銷售方案進行調查。他想把牛奶送到t個城鎮,編號為1 t。這些城鎮之間通過r條道路 編號為1到r 和p條航線 編號為1到p 連線。每條道路 i 或者航線 i 連線城鎮ai到bi,花費為ci。對於道路,0 ci 10,000 然而航線的花費很神奇,花費ci可能是負數...