題解 P1629 郵遞員送信

2022-07-15 04:51:08 字數 911 閱讀 5234

題目

dijkstra + 鏈式前向星 + 堆優化的題解。

這一題明顯是求最短路。與模板不同,它要求的是多源最短路,是每個節點到源點的距離。

這裡如果用暴力,或者每個節點求一遍,顯然在時間上是過不去的。(每個節點求一遍的堆優化的dijkstra是50分)

所以,就要用乙個重要的結論:逆圖中源點到各個點的最短路就是原圖中各個點到源點的最短路。

理解過程:

我們可以想象一下,在原圖中,n --> 1的最短路,如果在反向圖中不就是 n <-- 1 嗎?

有了這個結論,這道題就簡單多了:先求乙個原圖的最短路,再求乙個逆圖的最短路。這題就結束了。

附上**:

#include #define maxn 100005

#define inf 0x3f3f3f3f

struct edge //鏈式前向星

e[maxn],ne[maxn]; //原圖與逆圖

struct node //寫乙個堆的結構體

void init() //初始化

void dijkstra(edge e,int adj) //函式變數中記得帶上鄰接域

); while(!q.empty())

); }

} }}int main()

dijkstra(e,adj);

for(int i=1;i<=n;++i) ans+=dis[i];

dijkstra(ne,nadj);

for(int i=1;i<=n;++i) ans+=dis[i];

std::printf("%d",ans);

return 0;

}

P1629 郵遞員送信

有乙個郵遞員要送東西,郵局在節點 11。他總共要送 n 1n 1 樣東西,其目的地分別是節點 22 到節點 nn。由於這個城市的交通比較繁忙,因此所有的道路都是單行的,共有 mm 條道路。這個郵遞員每次只能帶一樣東西,並且運送每件物品過後必須返回郵局。求送完這 n 1n 1 樣東西並且最終回到郵局最...

P1629 郵遞員送信

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

題解 洛咕P1629 郵遞員送信

鏈結 乙個郵遞員要從一號點到每個點再回來,求最短路 題目說一次只能去乙個點,這樣就簡單了,求每個點最短路 怎麼求回來的最短路?每個點跑一次dijkstra?這樣會t 只要反向建邊,再求點1到各點的最短路不就行了嗎?可以畫個圖手算一遍 include include include include i...