這個裡面判斷的東西比較多
實際上不需要這麼多的,資料給的很水
完全可以加上重邊自環什麼的
而且這道題完全暴力做n次dij(3*10^7比較危險)
比較優化的方法是:
第一遍dij算出郵遞員到每個地方的距離
第二遍反向建邊,橫容易看出郵遞員到每個地方的距離都是每個地方到郵遞員的距離
這種方法就可以把單終點最短路徑轉變成單源最短路徑
另外說明一下,因為跑兩遍dij,為了便於區分分開寫的,變數名最後是1的是第一次dij有關,為2 則是第二次dij
上**
#include#include#include
#include
#include
using
namespace
std;
intn,m;
int h1[1926],h2[1926
];
ints1,s2;
struct
edge;
int v1[1926],v2[1926
];int d1[1926],d2[1926
];edge e1[
200860],e2[200860
];int looker1[1020][1020]; //
looker是得到i,j邊距離最小值
int looker2[1020][1020
];int l1[1020][1020]; //
l1是標記i,j是否走過
int l2[1020][1020
];void addedge1(int next,int to,int
dis)
void addedge2(int next,int to,int
dis)
void dij1(int
start)}}
}void dij2(int
start)}}
}int
main()
int tot=0
; dij1(1);
dij2(1);
for(i=1;i<=n;i++)
printf("%d
",tot);
return0;
}
洛谷 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 郵遞員送信
題目戳 題目描述 有乙個郵遞員要送東西,郵局在節點1.他總共要送n 1樣東西,其目的地分別是2 n。由於這個城市的交通比較繁忙,因此所有的道路都是單行的,共有m條道路,通過每條道路需要一定的時間。這個郵遞員每次只能帶一樣東西。求送完這n 1樣東西並且最終回到郵局最少需要多少時間。輸入輸出格式 輸入格...