这题……TAT
11402985 | HTwood | 3013 | Accepted | 10844K | 1032MS | Pascal | 2009B | 2013-03-27 21:21:10 |
11402592 | HTwood | 3013 | Wrong Answer | Pascal | 1995B | 2013-03-27 20:32:18 | ||
11402558 | HTwood | 3013 | Wrong Answer | Pascal | 1998B | 2013-03-27 20:28:47 | ||
11402487 | HTwood | 3013 | Wrong Answer | Pascal | 1998B | 2013-03-27 20:20:43 | ||
11402470 | HTwood | 3013 | Wrong Answer | Pascal | 2000B | 2013-03-27 20:18:05 | ||
11402420 | HTwood | 3013 | Wrong Answer | Pascal | 1968B | 2013-03-27 20:12:43 | ||
11402417 | HTwood | 3013 | Wrong Answer | Pascal | 1994B | 2013-03-27 20:12:06 | ||
11402408 | HTwood | 3013 | Wrong Answer | Pascal | 2851B | 2013-03-27 20:10:27 | ||
11402396 | HTwood | 3013 | Wrong Answer | Pascal | 2853B | 2013-03-27 20:08:00 | ||
11402302 | HTwood | 3013 | Wrong Answer | Pascal | 2729B | 2013-03-27 19:55:34 | ||
11402243 | HTwood | 3013 | Wrong Answer | Pascal | 2729B | 2013-03-27 19:47:10 | ||
11402229 | HTwood | 3013 | Wrong Answer | Pascal | 2710B | 2013-03-27 19:45:26 | ||
11402220 | HTwood | 3013 | Wrong Answer | Pascal | 2712B | 2013-03-27 19:43:43 | ||
11402204 | HTwood | 3013 | Wrong Answer | Pascal | 2718B | 2013-03-27 19:41:33 | ||
11402186 | HTwood | 3013 | Wrong Answer | Pascal | 2731B | 2013-03-27 19:39:06 | ||
11402172 | HTwood | 3013 | Runtime Error | Pascal | 2724B | 2013-03-27 19:35:52 | ||
11402170 | HTwood | 3013 | Runtime Error | Pascal | 2724B | 2013-03-27 19:35:27 | ||
11402137 | HTwood | 3013 | Wrong Answer | Pascal | 2644B | 2013-03-27 19:29:52 |
1、用int64存储信息 2、似乎edge要开200000 3、n=0或1时输出0 4、确认你的spfa没写错,访问下一个节点前先对当前节点置v[x]=true(环!),最后置为false 5、最后检验时要记得从i=2时开始检验 6、inf要是1<<61左右,太大会爆,太小不行 7、双向边,重边
program p3013;
Type
rec=record
e,w,next:int64;
end;
Var
a:array[0..200002] of rec;
b,g,q,dt:array[0..200002] of int64;
v:array[0..200002] of boolean;
n,m,t,top,ans,st,ed,ww:int64;
i:longint;
ok:boolean;
Procedure fopen;
begin
assign(input,'p3013.in');
assign(output,'p3013.out');
reset(input);
rewrite(output);
end;
Procedure fclose;
begin
close(input);
close(output);
end;
Procedure Add(ss,ee,ww:longint);
begin
inc(top);
with a[top] do
begin
next:=b[ss];
e:=ee;
w:=ww;
end;
b[ss]:=top;
end;
Procedure spfa;
var
close,open,o,x:int64;
y:rec;
i:longint;
begin
fillchar(v,sizeof(v),false);
fillchar(q,sizeof(q),0);
for i:=1 to 200000 do dt[i]:=1 shl 61;
dt[1]:=0;
v[1]:=true;
close:=0;open:=1;
q[1]:=1;
while close<>open do
begin
close:=close mod n+1;
x:=q[close];v[x]:=true;
//v[x]:=false;
o:=b[x];
while o<>0 do
begin
y:=a[o];
o:=y.next;
with y do
begin
if dt[e]>dt[x]+w then
begin
dt[e]:=dt[x]+w;
if not v[e] then
begin
open:=open mod n+1;
q[open]:=e;
v[e]:=true;
end;
end;
end;
end;
//writeln('x=',x);
v[x]:=false;
end;
end;
begin
readln(t);
while t>0 do
begin
top:=0;
dec(t);
readln(n,m);
fillchar(a,sizeof(a),0);
fillchar(b,sizeof(b),0);
for i:=1 to n do
read(g[i]);
for i:=1 to m do
begin
read(st,ed,ww);
//if st=ed then continue;
Add(st,ed,ww);
Add(ed,st,ww);
end;
if (n<2) then writeln(0) else begin
//prepare;
spfa;
ans:=0;
ok:=true;
for i:=2 to n do if dt[i]<1 shl 61 then ans:=ans+dt[i]*g[i] else begin ok:=false; writeln('No Answer');break;end;
if ok then writeln(ans); end;
end;
end.