郵遞員送信(最短路)

2021-07-22 02:09:59 字數 1483 閱讀 5714

郵遞員送信

【題目描述】

有乙個郵遞員要送東西,郵局在結點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

題解:最短路。

因為dijkstra堆優化 的時間複雜度計算錯誤,上午tle了- -

dijkstra 堆優化 o((n+m)logn) n為點數,m為邊數

spfa   o(ek) e為邊數,k為常數,但是特殊構圖會卡成o(n^2)

這道題就是正向見圖+反向見圖,求兩遍以1為起點的單源最短路即可。

#include#include#include#include#include#include#include#define pa pair#define n 100003

#define m 1003

#define inf 1000000003

#define ll long long

using namespace std;

int n,m;

int point[n],c[n],v[n],next[n],tot;

int point1[n],c1[n],v1[n],next1[n],tot1;

int dis[m],dis1[m];

void add(int x,int y,int z)

void dijkstra(int s) }}

void dijkstra1(int s) }}

int main()

for (int i=1;i<=n;i++)

dis[i]=dis1[i]=inf;

dijkstra(1);

dijkstra1(1);

ll ans=0;

for (int i=2;i<=n;i++)

ans+=(ll)dis[i]+(ll)dis1[i];

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

}

郵遞員送信

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

洛谷 P1629 郵遞員送信 最短路

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

終於回來了 郵遞員送信

暑假裡很忙,計算機也有好幾次集訓,做了些好題,接下來幾天會分享一下。post.pas c cpp 題目描述 有乙個郵遞員要送東西,郵局在節點 1。他總共要送 n 1 樣東西,其目的地分別是 2 n。由於這個城市的交通比較繁忙,因此所有的道路都是單行的,共有 m 條道路,通過每條 道路需要一定的時間。...