浪裡個浪 FZU 2261(最短路好題)

2021-08-19 23:30:52 字數 1691 閱讀 6535

tonyy是乙個喜歡到處浪的男人,他的夢想是帶著蘭蘭姐姐浪遍**的各個角落,不過在此之前,他需要做好規劃。

現在他的手上有乙份**地圖,上面有n個城市,m條交通路徑,每條交通路徑都是單行道。他已經預先規劃好了一些點作為旅遊的起點和終點,他想選擇其中乙個起點和乙個終點,並找出從起點到終點的一條路線親身體驗浪的過程。但是他時間有限,所以想選擇耗時最小的,你能告訴他最小的耗時是多少嗎?

input

包含多組測試資料。

輸入第一行包括兩個整數n和m,表示有n個地點,m條可行路徑。點的編號為1 - n。

接下來m行每行包括三個整數i, j, cost,表示從地點i到地點j需要耗時cost。

接下來一行第乙個數為s,表示可能的起點數,之後s個數,表示可能的起點。

接下來一行第乙個數為e,表示可能的終點數,之後e個數,表示可能的終點。

0輸出他需要的最短耗時。

sample input

4 4

1 3 1

1 4 2

2 3 3

2 4 4

2 1 2

2 3 4

sample output
1

題意:n個城市,m條單向道路,s個可能的起點,e個可能的終點,問從起點到終點的最短時間是多少。

思路:比賽時想的是既然s個起點,那每個起點都跑一遍spfa然後遍歷找到終點最短的路程即可。但是這樣的複雜度太高了,應該是會超時的,沒想到後台資料不大,這樣寫竟然過了,哈哈哈

#include#include#include#include#include#includeusing namespace std;

#define inf 0x3f3f3f3f

const int n=1e5+10;

int m,n,a[n],b[n],dis[n],tot,head[n],sa[n],sb[n],s1,s2;

bool vis[n];

struct node

e[n];

void add(int a,int b,int c)

void spfa(int st)}}

}}int main()

scanf("%d",&s1);

for(int i=0;i那這題的正解是什麼呢?那就是新增乙個超級起點和乙個超級終點,讓所有可能的起點到超級起點的距離都為0,所有可能的終點到超級終點的距離都為0,然後只要跑一遍spfa找到超級起點到超級終點的最短時間就是我們所要的答案了

#include#include#include#include#include#includeusing namespace std;

#define inf 0x3f3f3f3f

const int n=1e5+10;

int m,n,a[n],b[n],dis[n],tot,head[n],sa[n],sb[n],s1,s2;

bool vis[n];

struct node

e[n*10];

void add(int a,int b,int c)

void spfa()}}

}printf("%d\n",dis[n+1]);

}int main()

scanf("%d",&s1);

for(int i=0;iscanf("%d",&s2);

for(int i=0;ispfa();

}}

I 浪裡個浪 FZU 2261 (最短路)

tonyy是乙個喜歡到處浪的男人,他的夢想是帶著蘭蘭姐姐浪遍 的各個角落,不過在此之前,他需要做好規劃。現在他的手上有乙份 地圖,上面有n個城市,m條交通路徑,每條交通路徑都是單行道。他已經預先規劃好了一些點作為旅遊的起點和終點,他想選擇其中乙個起點和乙個終點,並找出從起點到終點的一條路線親身體驗浪...

FZU 2261 浪裡個浪 多源最短路

tonyy是乙個喜歡到處浪的男人,他的夢想是帶著蘭蘭姐姐浪遍 的各個角落,不過在此之前,他需要做好規劃。現在他的手上有乙份 地圖,上面有n個城市,m條交通路徑,每條交通路徑都是單行道。他已經預先規劃好了一些點作為旅遊的起點和終點,他想選擇其中乙個起點和乙個終點,並找出從起點到終點的一條路線親身體驗浪...

FZU 2261 浪裡個浪(spfa)

link tonyy是乙個喜歡到處浪的男人,他的夢想是帶著蘭蘭姐姐浪遍 的各個角落,不過在此之前,他需要做好規劃。現在他的手上有乙份 地圖,上面有n個城市,m條交通路徑,每條交通路徑都是單行道。他已經預先規劃好了一些點作為旅遊的起點和終點,他想選擇其中乙個起點和乙個終點,並找出從起點到終點的一條路線...