FZU 2261 浪裡個浪(spfa)

2021-08-19 17:45:13 字數 1373 閱讀 5648

link:

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

思路:

要確定起點和終點,不用kruskal  用spfa

另外因為起點、終點不確定,所以在所有起點前加乙個0節點作為公共起點,在所有終點後加乙個n+1節點作為公共終點

然後直接套模板

code:

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

const int maxn=2e5+10;

const int inf=0x3f3f3f3f;

int n,m,f,t,v,tot,ans;

int dis[maxn],vis[maxn],head[maxn];

struct edge

edge[maxn];

void build(int u,int v,int w)

void spfa()

for(int i=head[u];i!=-1;i=edge[i].next)

}} }

}int main()

scanf("%d",&a);

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

scanf("%d",&a);

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

spfa();

printf("%d\n",ans);

}return 0;

}

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

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

FZU 2261浪裡個浪 spfa求最短時間

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

FZU 2261 浪裡個浪 多源最短路

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