單源最短路 新年好

2021-10-02 07:07:54 字數 1914 閱讀 9354

重慶城裡有 n 個車站,m 條 雙向 公路連線其中的某些車站。

每兩個車站最多用一條公路連線,從任何乙個車站出發都可以經過一條或者多條公路到達其他車站,但不同的路徑需要花費的時間可能不同。

在一條路徑上花費的時間等於路徑上所有公路需要的時間之和。

佳佳的家在車站 1,他有五個親戚,分別住在車站 a,b,c,d,e。

過年了,他需要從自己的家出發,拜訪每個親戚(順序任意),給他們送去節日的祝福。

怎樣走,才需要最少的時間?

輸入格式

第一行:包含兩個整數 n,m,分別表示車站數目和公路數目。

第二行:包含五個整數 a,b,c,d,e,分別表示五個親戚所在車站編號。

以下 m 行,每行三個整數 x,y,t,表示公路連線的兩個車站編號和時間。

輸出格式

輸出僅一行,包含乙個整數 t,表示最少的總時間。

資料範圍

1 ≤n

≤50000

1≤n≤50000

1≤n≤50

000,

1 ≤m

≤105

1≤m≤105

1≤m≤10

5,1

b,c,

d,e≤

n1

1b,c,

d,e≤

n,1 ≤x

,y≤n

1≤x,y≤n

1≤x,y≤

n,1 ≤t

≤100

1≤t≤100

1≤t≤10

0輸入樣例:

6 62 3 4 5 6

1 2 8

2 3 3

3 4 4

4 5 5

5 6 2

1 6 7

輸出樣例:

21這道題我們乘車的方案有5!種,所以我們先預處理一下個個點對的最小距離然後dfs跑一遍求所有方案中的最小值。

#include

#include

#include

#include

using

namespace std;

const

int n =

50005

;const

int m =

200005

;int q[10]

;int head[n]

, nxt[m *2]

, pnt[m *2]

, w[m *2]

, e;

int dist[10]

[n];

int n, m;

void

add_edge

(int a,

int b,

int c)

void

dij(

int num,

int s)}}

}int vis[10]

;int ans =0;

void

dfs(

int u,

int num,

int now,

int l)

int i, v;

for(i =

2; i <=

6; i++)}

}int

main()

for(i =

1; i <=

6; i++

)dij

(i, q[i]);

vis[1]

=1; ans =(1

<<30)

;dfs

(q[1],

1,1,

0);printf

("%d\n"

, ans)

;return0;

}

最短路 新年好

原題鏈結 老師講解是 1 先預處理出以1 a b c d e出發到其他所有點的單源最短路徑。2 dfs所有拜訪順序,5!對於每一種擺拜訪順序,可以通過查表的方式,算出最短距離。我 極其討厭dfs的我直接放棄選擇列舉。實現 include define n 50000 10 using namespa...

新年好 最短路 dfs)

重慶城裡有 nn 個車站,mm 條雙向公路連線其中的某些車站。每兩個車站最多用一條公路連線,從任何乙個車站出發都可以經過一條或者多條公路到達其他車站,但不同的路徑需要花費的時間可能不同。在一條路徑上花費的時間等於路徑上所有公路需要的時間之和。佳佳的家在車站 11,他有五個親戚,分別住在車站 a,b,...

最短路 dfs 新年好

題目鏈結 題目大意 給乙個圖 求其中6個點的全排列 哪種路最短 先預處理6個點到其他點的最短路 然後 dfs列舉排列 求最小值 include using namespace std const int n 1e6 int dis 6 n st n int n,m,sorce 6 int h n n...