題解 郵遞員寄信 luoguP1629

2022-07-30 04:15:16 字數 1169 閱讀 1237

有乙個郵遞員要送東西,郵局在結點1.他總共要送n-1樣東西,其目的地分別是2-n。由於這個城市的交通比較繁忙,因此所有的道路都是單行的,共有m條道路,通過每條道路需要一定的時間。這個郵遞員每次只能帶一樣東西。求送完這n-1樣東西並且最終回到郵局最少需要多少時間。

第一行包含兩個正整數n和m;

接下來m行,每行三個正整數u,v,w,表示該條道路為從u到v的,且通過這條道路需要w的時間。滿足1≤u,v≤n,1≤w≤10000,輸入保證任意兩點都能互相到達。

輸出僅一行,包含乙個整數,為最少需要的時間。

5 10

2 3 5

1 5 5

3 5 6

1 2 8

1 3 8

5 3 4

4 1 8

4 5 3

3 5 6

5 4 2

83
對於30%的資料,1≤n≤200;

對於100%的資料,1≤n≤1000,1≤m≤100000。

首先每次只能帶乙個東西,知道這個就不用多想了 da\(^o^)/ ,求總路徑最短,不就是求每個的來回路徑最短嗎?那麼我們正反向建邊加 dijstra + 堆優化 秒切。

關於反向建邊的原理,我們可以這樣想,將a到b的邊改為b到a,那麼a節點到b節點的路徑不就是原來b節點到a節點的路徑嗎?這樣當然就可以用 dijstra 去做了。

1 #include2 #include3 #include4

using

namespace

std;56

const

int max_n=1e6+5;7

8int n,resa=-1,resb=-1;9

inta[max_n];

1011

intmain()

1226

if(resa>resb) swap(resa,resb);

27 printf("

%d %d\n

",resa,resb);

28return0;

29 }

view code

題解僅供思路,要想成為 dalao ,請學會並盡量會做到教他人甚至自己寫題解。

博主(目前)是一名初二蒟蒻,如有問題還請大家指出,一起交流學習!

Luogu P1629 郵遞員送信

有乙個郵遞員要送東西,郵局在節點1.他總共要送n 1樣東西,其目的地分別是2 n。由於這個城市的交通比較繁忙,因此所有的道路都是單行的,共有m條道路,通過每條道路需要一定的時間。這個郵遞員每次只能帶一樣東西。求送完這n 1樣東西並且最終回到郵局最少需要多少時間。輸入格式 第一行包括兩個整數n和m。第...

LuoguP1629 郵遞員送信

題目鏈結 題目大意 讓你求1到 2 n 2 n2 n的路徑和2 n 2 n2 n到1的路徑,然後加起來 思路 起點為1的做法比較簡單,可以用spfa來做 其實2 n 2 n2 n到1的路徑就把圖反過來得到的值就是2 n 2 n2 n到1的路徑 include include include usin...

Luogu P1629 郵遞員送信「程式設計題」

瀏覽一遍題目,很容易分析出是最短路模型。首先跑一次1號店到其他點的最短路,然後在他返回時從每乙個點都跑一次最短路,但在返回過程中我們只利用每個點到1號點的最短路,卻要跑 n 1 次,所以顯然十分浪費。並且複雜度是o n m log n 如何解決這個問題呢?如果我們把每條邊的方向反過來,那麼原來每個點...