有乙個郵遞員要送東西,郵局在節點 11。他總共要送 n-1n−1 樣東西,其目的地分別是節點 22 到節點 nn。由於這個城市的交通比較繁忙,因此所有的道路都是單行的,共有 mm 條道路。這個郵遞員每次只能帶一樣東西,並且運送每件物品過後必須返回郵局。求送完這 n-1n−1 樣東西並且最終回到郵局最少需要的時間。
輸入格式
第一行包括兩個整數,nn 和 mm,表示城市的節點數量和道路數量。
第二行到第 (m+1)(m+1) 行,每行三個整數,u,v,wu,v,w,表示從 uu 到 vv 有一條通過時間為 ww 的道路。
輸出格式
輸出僅一行,包含乙個整數,為最少需要的時間。
輸入輸出樣例
輸入 #1複製
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
輸出 #1複製
83題意:給你乙個有向圖,讓你求從1號點到所有點的最短距離加上所有點到1號點的距離之和的最小值。
思路:反向建圖是真的妙,反向建圖一號點到所有點的距離不就是所有點到一號點的距離之和嗎!
**:
#include
#include
#include
#include
using namespace std;
const int n=100010 , m=500010;
typedef long long ll;
typedef pair pii;
int dist[n]
;int h[n],e[m],ne[m],idx,w[m]
;int hr[n]
;void add(int h[
],int a,int b,int c)
int n,m,s;
bool st[n]
;void dijkstra())
; while(q.size()))
;}}}
ll res=0;
for(int i=1;i<=n;i++)
res+=dist[i]
; memset(dist,0x3f,sizeof dist)
; dist[1]
=0; priority_queue,greater
>qq;
qq.push();
memset(st,0,sizeof st)
; while(qq.size()))
;}}}
for(int i=1;i<=n;i++)
res+=dist[i]
; cout
int main(
) dijkstra();
}
P1629 郵遞員送信
有乙個郵遞員要送東西,郵局在節點1.他總共要送n 1樣東西,其目的地分別是2 n。由於這個城市的交通比較繁忙,因此所有的道路都是單行的,共有m條道路,通過每條道路需要一定的時間。這個郵遞員每次只能帶一樣東西。求送完這n 1樣東西並且最終回到郵局最少需要多少時間。輸入格式 第一行包括兩個整數n和m。第...
題解 P1629 郵遞員送信
題目 dijkstra 鏈式前向星 堆優化的題解。這一題明顯是求最短路。與模板不同,它要求的是多源最短路,是每個節點到源點的距離。這裡如果用暴力,或者每個節點求一遍,顯然在時間上是過不去的。每個節點求一遍的堆優化的dijkstra是50分 所以,就要用乙個重要的結論 逆圖中源點到各個點的最短路就是原...
洛谷 P1629 郵遞員送信
題目大意 求乙個郵遞員把信分別送到2 n的最短路,與他回到節點的最短路之和。dijkstra 題目是無向圖並且要求求出來回最短路之和。2.用dijkstra求1到其它點的最短路,再將每條邊反向再求一次1到其它點的最短路,然後相加。時間複雜度 o n 2 var m array 0.1001 of b...