bzoj 2200 道路與航線 最短路高階

2021-07-02 15:32:51 字數 2340 閱讀 1080

time limit: 10 sec  

memory limit: 259 mb

submit: 528  

solved: 173 [

submit][

status][

discuss]

farmer john正在乙個新的銷售區域對他的牛奶銷售方案進行調查。他想把牛奶送到t個城鎮 (1 <= t <= 25,000),編號為1t。這些城鎮之間通過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) 把奶牛送到每個城鎮的最便宜的方案,或者知道這是不可能的。

* 第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

* 第1到t行:從s到達城鎮i的最小花費,如果不存在輸出"no path"。

6 3 3 4

1 2 5

3 4 5

5 6 10

3 5 -100

4 6 -100

1 3 -10

樣例輸入解釋:

一共六個城鎮。在1-2,3-4,5-6之間有道路,花費分別是5,5,10。同時有三條航線:3->5,

4->6和1->3,花費分別是-100,-100,-10。fj的中心城鎮在城鎮4。

no path

no path50

-95-100

樣例輸出解釋:

fj的奶牛從4號城鎮開始,可以通過道路到達3號城鎮。然後他們會通過航線達到5和6號城鎮。

但是不可能到達1和2號城鎮。

wa了無數遍,最終發現bfs算入度的時候沒標記起點,啊啊~~錯的萌萌噠~~

題意:在乙個含有向邊(存在負邊),無向邊的圖中,給你乙個起點,求出起點到所有點的最短路,

有負邊,spfa搞。。超時,堆優化的dijkstra不能處理負邊~~。

思路:由於題目說了,如果有a到b的航線,不會有b到a的航線或道路。就是說不會存在含有 有向邊的環。所以我們把所有的無向邊的點縮點,縮點後會發現此圖變成乙個有向無環圖,對於有向無環圖我們可以top序dp求出起點到每個連通塊的最短路。然後在每個連通塊中用dijkstra求最短路,就行了。

#include#include#include#include#include#include#include#include#include#include#include#define inf 0x3f3f3f3f

#define max 25005

#define mod 10000007

#define clr(a,b) memset((a),(b),sizeof((a)))

#pragma comment(linker, "/stack:102400000,102400000")

#define ul u<<1

#define ur (u<<1)1

using namespace std;

typedef long long ll;

struct edge

};struct node

bool operator <(const node & a) const

void ol(int n)

}int len=plan[u].size();

for(int i=0; idis[u]+w)

--degree[root];

if(degree[root]==0) dp.push(root);}}

}void top_dp(int s)

}void init()

int main()

ol(n);

for(int i=1; i<=p; i++)

bfs(s);

top_dp(s);

for(int i=1; i<=n; i++)

return 0;

}

道路與航線

農夫約翰正在乙個新的銷售區域對他的牛奶銷售方案進行調查。他想把牛奶送到t個城鎮,編號為1 t。這些城鎮之間通過r條道路 編號為1到r 和p條航線 編號為1到p 連線。每條道路 ii 或者航線 ii 連線城鎮ai到bi,花費為ci。對於道路,0 ci 10,0000 ci 10,000 然而航線的花費...

道路與航線(最短路 縮點 拓撲排序)

題目描述 農夫約翰正在乙個新的銷售區域對他的牛奶銷售方案進行調查。他想把牛奶送到t個城鎮,編號為1 t。這些城鎮之間通過r條道路 編號為1到r 和p條航線 編號為1到p 連線。每條道路 i 或者航線 i 連線城鎮ai到bi,花費為ci。對於道路,0 ci 10,000 然而航線的花費很神奇,花費ci...

AcWing 342 道路與航線

農夫約翰正在乙個新的銷售區域對他的牛奶銷售方案進行調查。他想把牛奶送到t個城鎮,編號為1 t。這些城鎮之間通過r條道路 編號為1到r 和p條航線 編號為1到p 連線。每條道路 i 或者航線 i 連線城鎮ai到bi,花費為ci。對於道路,0 ci 10,000 然而航線的花費很神奇,花費ci可能是負數...