讨论 / 为什么我的spfa这么慢???
青龙白狐 2009-08-05 18:02:00
点我顶贴 收藏 删除
rt

type link=^node;

node=record

a,d:longint;

next:link

end;

var a,d:array[1..30000] of longint;

v:array[1..30000] of boolean;

l:array[1..30000] of link;

s:array[1..300000] of longint;

i,j,n,m,p,c,x,y,ans,dis,q,h:longint;

t:link;

begin

readln(n,m);

for i:=1 to n do l[i]:=nil;

for i:=1 to m do

begin

readln(x,y,dis);

new(t);t^.a:=y;t^.d:=dis;t^.next:=l[x];l[x]:=t;

new(t);t^.a:=x;t^.d:=dis;t^.next:=l[y];l[y]:=t

end;

ans:=maxlongint;

for i:=1 to n do d[i]:=1000000000;

d[1]:=0;

v[1]:=true;

s[1]:=1;q:=0;h:=1;

while q<h do

begin

inc(q);

t:=l[s[q]];v[s[q]]:=false;

while t<>nil do

begin

if d[s[q]]+t^.d<d[t^.a]

then

begin

d[t^.a]:=d[s[q]]+t^.d;

if not v[t^.a] then begin v[t^.a]:=true;inc(h);s[h]:=t^.a end

end;

t:=t^.next

end

end;

writeln(d[n])

end.

3000ms+++

#1 @2009-08-02 23:16:00
回复 删除
不知
#2 青龙白狐@2009-08-04 00:30:00
回复 删除
没人理我
#3 hades@2009-08-04 04:32:00
回复 删除
LZ啊你怎么用链表呢?我看不懂……
#4 青龙白狐@2009-08-04 06:26:00
回复 删除
顶顶
#5 青龙白狐@2009-08-05 18:01:00
回复 删除
我都服了,问个题没人理,好容易有人理我了,想把分给人家,却说有恶意转移积分嫌疑,晕

抗议

#6 青龙白狐@2009-08-05 18:02:00
回复 删除
我都服了,问个题没人理,好容易有人理我了,想把分给人家,却说有恶意转移积分嫌疑,晕

抗议

#7 青龙白狐@2009-08-05 18:02:00
回复 删除
我都服了,问个题没人理,好容易有人理我了,想把分给人家,却说有恶意转移积分嫌疑,晕

抗议

查看更多回复
提交回复