題目大意:
求乙個郵遞員把信分別送到2~n的最短路,與他回到節點的最短路之和。
dijkstra:
題目是無向圖並且要求求出來回最短路之和。
2.用dijkstra求1到其它點的最短路,再將每條邊反向再求一次1到其它點的最短路,然後相加。
時間複雜度:o(n^2)
var
m:array [0..1001] of boolean;
a,b:array [0..1001,0..1001] of longint;
f:array [0..1001] of longint;
i,j,t,c,p,q,w,ans:longint;
procedure
dijkstra;
var i,j,u,min:longint;
begin
fillchar(m,sizeof(m),false);
for i:=1
to t do f[i]:=a[1,i];
repeat
u:=0; min:=maxlongint;
for i:=1
to t do
if (not m[i]) and (f[i]then
begin
u:=i;
min:=f[i];
end;
if u<>0
then
begin
m[u]:=true;
for i:=1
to t do
if (not m[i]) and (f[u]+a[u,i]then f[i]:=f[u]+a[u,i];
end;
until u=0;
for i:=2
to t do ans:=ans+f[i];
end;
begin
readln(t,c);
for i:=1
to t do
for j:=1
to t do
begin
a[i,j]:=maxlongint div
3; b[i,j]:=a[i,j];
end;
for i:=1
to c do
begin
readln(p,q,w);
if wthen a[p,q]:=w;
if wthen b[q,p]:=w;
end;
dijkstra;
a:=b;
dijkstra;
writeln(ans);
end.
洛谷P1629 郵遞員送信
有乙個郵遞員要送東西,郵局在節點1.他總共要送n 1樣東西,其目的地分別是2 n。由於這個城市的交通比較繁忙,因此所有的道路都是單行的,共有m條道路,通過每條道路需要一定的時間。這個郵遞員每次只能帶一樣東西。求送完這n 1樣東西並且最終回到郵局最少需要多少時間。輸入格式 第一行包括兩個整數n和m。第...
洛谷 P1629 郵遞員送信
這個裡面判斷的東西比較多 實際上不需要這麼多的,資料給的很水 完全可以加上重邊自環什麼的 而且這道題完全暴力做n次dij 3 10 7比較危險 比較優化的方法是 第一遍dij算出郵遞員到每個地方的距離 第二遍反向建邊,橫容易看出郵遞員到每個地方的距離都是每個地方到郵遞員的距離 這種方法就可以把單終點...
洛谷P1629 郵遞員送信
題目戳 題目描述 有乙個郵遞員要送東西,郵局在節點1.他總共要送n 1樣東西,其目的地分別是2 n。由於這個城市的交通比較繁忙,因此所有的道路都是單行的,共有m條道路,通過每條道路需要一定的時間。這個郵遞員每次只能帶一樣東西。求送完這n 1樣東西並且最終回到郵局最少需要多少時間。輸入輸出格式 輸入格...