道路與航線

2022-04-12 06:01:56 字數 1386 閱讀 5282

農夫約翰正在乙個新的銷售區域對他的牛奶銷售方案進行調查。

他想把牛奶送到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可能是負數...