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 4sample output1 3 1
1 4 2
2 3 3
2 4 4
2 1 2
2 3 4
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條交通路徑,每條交通路徑都是單行道。他已經預先規劃好了一些點作為旅遊的起點和終點,他想選擇其中乙個起點和乙個終點,並找出從起點到終點的一條路線親身體驗浪...