巧解 洛谷 P1629 郵遞員送信

2021-08-07 21:33:42 字數 1107 閱讀 3684

題目在這裡不在贅述

不知道題目的給個傳送門 

這題明顯分為2個部分

1.從郵局取送信 

2.從送信地點回來

第一部分好做的很 直接跑一邊spfa即可

那麼問題來了,第2部分怎麼做?

對於每個頂點跑一邊spfa?

直接上floyd?

但是 限時1s顯然是不允許的

所以我們將這個問題轉化

將初始的每條邊反向

然後跑一邊spfa即可

證明是顯而易見的

下面給出**

#include

#include

#include

#include

#include

#include

#define maxn 100010

#define ll long long

#define info 10000000

using

namespace

std;

int n,m,next[maxn],to[maxn],w[maxn],st[maxn],xx[maxn],yy[maxn],zz[maxn],topt,dis[maxn],f[maxn];

ll ans;

intread

() return x;

}void

add(int x,int y,int z)

void

spfa

() else }}

p=next[p];}}

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

}void

init

()int

main

() spfa();

init();

for (int i=1;i<=m;i++) add(yy[i],xx[i],zz[i]);

spfa();

printf("%lld\n",ans);

return

0;}

洛谷 P1629 郵遞員送信

題目大意 求乙個郵遞員把信分別送到2 n的最短路,與他回到節點的最短路之和。dijkstra 題目是無向圖並且要求求出來回最短路之和。2.用dijkstra求1到其它點的最短路,再將每條邊反向再求一次1到其它點的最短路,然後相加。時間複雜度 o n 2 var m array 0.1001 of b...

洛谷P1629 郵遞員送信

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

洛谷 P1629 郵遞員送信

這個裡面判斷的東西比較多 實際上不需要這麼多的,資料給的很水 完全可以加上重邊自環什麼的 而且這道題完全暴力做n次dij 3 10 7比較危險 比較優化的方法是 第一遍dij算出郵遞員到每個地方的距離 第二遍反向建邊,橫容易看出郵遞員到每個地方的距離都是每個地方到郵遞員的距離 這種方法就可以把單終點...