有乙個郵遞員要送東西,郵局在結點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 102 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 #include4view codeusing
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 }
題解僅供思路,要想成為 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 如何解決這個問題呢?如果我們把每條邊的方向反過來,那麼原來每個點...