| ||||||||||
| 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 | |||||||||
spfa判负权环47ms。贴pascal代码procedure main;
var n,m,t,x,y,z,num,i:longint;
u,v,w,next,first:array[0..10000] of longint;
procedure addedge(x,y,z:longint);
begin
inc(num);
u[num]:=x;v[num]:=y;w[num]:=z;
next[num]:=first[x];
first[x]:=num;
end;
function spfa:boolean;
var q:array[0..10000] of longint;
dist:array[0..10000] of longint;
visited:array[0..10000] of boolean;
time:array[0..10000] of longint;
f,r,x,e:longint;
begin
fillchar(dist,sizeof(dist),127);
fillchar(visited,sizeof(visited),false);
fillchar(time,sizeof(time),0);
f:=0;r:=1;
q[r]:=0;visited[0]:=true;
time[0]:=1;dist[0]:=0;
while f<>r do
begin
f:=(f+1) mod 10000;
x:=q[f];visited[x]:=false;
e:=first[x];
while e<>-1 do
begin
if dist[x]+w[e]<dist[v[e]] then
begin
dist[v[e]]:=dist[x]+w[e];
if not visited[v[e]] then
begin
r:=(r+1) mod 10000;
q[r]:=v[e];visited[q[r]]:=true;
inc(time[q[r]]);
if time[q[r]]>6 then exit(true);
end;
end;
e:=next[e];
end;
end;
exit(false);
end;
begin
readln(n,m,t);
num:=0;
fillchar(first,sizeof(first),255);
for i:=1 to m do
begin
readln(x,y,z);
addedge(x,y,z);
addedge(y,x,z);
end;
for i:=1 to t do
begin
readln(x,y,z);
addedge(x,y,-z);
end;
for i:=1 to n do
addedge(0,i,0);
if spfa then writeln('YES') else writeln('NO');
end;
////////////////////////////////////////////////////////
var t:longint;
begin
readln(t);
while t<>0 do
begin
main;
dec(t);
end;
end.
Followed by: Post your reply here: |
All Rights Reserved 2003-2013 Ying Fuchen,Xu Pengcheng,Xie Di
Any problem, Please Contact Administrator