| ||||||||||
| Online Judge | Problem Set | Authors | Online Contests | User | ||||||
|---|---|---|---|---|---|---|---|---|---|---|
| Web Board Home Page F.A.Qs Statistical Charts | Current Contest Past Contests Scheduled Contests Award Contest | |||||||||
大牛帮忙看看!!const
maxn=maxlongint div 2;
type
ar=^node;
node=record
a,b:longint;
next:ar;
end;
var
map:array[1..1003,1..1003] of longint;
fee:array[1..1003] of ar;
dis,f:array[1..1003] of longint;
que:array[1..10000] of longint;
used:array[1..1003] of boolean;
n,m,s,t:longint;
procedure add(i,j,c,k:longint);
var p:ar;
begin
map[i,j]:=k;
new(p);
with p^ do begin
a:=j; b:=c; next:=fee[i];
end;
fee[i]:=p;
new(p);
with p^ do begin
a:=i; b:=c; next:=fee[j];
end;
fee[j]:=p;
end;
procedure mark;
var
p:ar;
i1,head,tail,i:longint;
begin
fillchar(f,sizeof(f),0);
for i1:=1 to n do dis[i1]:=maxn;
fillchar(used,sizeof(used),false);
dis[1]:=0; que[1]:=1; used[1]:=true;
head:=1; tail:=1;
while head<=tail do begin
i:=que[head];
p:=fee[i];
while p<>nil do begin
if (dis[i]+p^.b<dis[p^.a])and(map[i,p^.a]>0) then begin
dis[p^.a]:=dis[i]+p^.b;
f[p^.a]:=i;
if not used[p^.a] then begin
inc(tail);
que[tail]:=p^.a;
used[p^.a]:=true;
end;
end;
p:=p^.next;
end;
inc(head);
used[i]:=false;
end;
end;
procedure main;
var i1,i,j,w1,w2,w3,ans:longint;
begin
readln(n,m);
for i1:=1 to m do begin
readln(w1,w2,w3);
add(w1,w2,w3,1);
end;
add(n,n+1,0,2);
inc(n);
ans:=0;
mark;
while f[n]<>0 do begin
inc(ans,dis[n]);
i:=n;
repeat
j:=i; i:=f[i];
dec(map[i,j]);
inc(map[j,i]);
until i=1;
mark;
end;
writeln(ans);
end;
begin
main;
end.
Followed by: Post your reply here: |
All Rights Reserved 2003-2013 Ying Fuchen,Xu Pengcheng,Xie Di
Any problem, Please Contact Administrator