首页 > 学院 > 开发设计 > 正文

洛谷 P1629 邮递员送信

2019-11-06 07:51:14
字体:
来源:转载
供稿:网友

题目大意: 求一个邮递员把信分别送到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]<min) 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]<f[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 w<a[p,q] then a[p,q]:=w; if w<b[q,p] then b[q,p]:=w; end; dijkstra; a:=b; dijkstra; writeln(ans);end.
发表评论 共有条评论
用户名: 密码:
验证码: 匿名发表