郵遞員送信
【題目描述】
有乙個郵遞員要送東西,郵局在結點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 條道路,通過每條 道路需要一定的時間。...