测评机: Xeost[5]
得分: 80分
提交日期: 2012-10-18 17:15:00
有效耗时: 3141毫秒
测试结果1: 通过本测试点|有效耗时203ms
测试结果2: 通过本测试点|有效耗时188ms
测试结果3: 通过本测试点|有效耗时172ms
测试结果4: 通过本测试点|有效耗时187ms
测试结果5: 通过本测试点|有效耗时203ms
测试结果6: 通过本测试点|有效耗时641ms
测试结果7: 通过本测试点|有效耗时875ms
测试结果8: 通过本测试点|有效耗时672ms
测试结果9: 选手程序运行超过时限
测试结果10: 测试结果错误.错误结果为:12577
正确结果应为:8087
type
pnode=^tnode;
tnode=record
d,q:longint;
next:pnode;
end;
var
n:longint;
dian:array[0..30000] of pnode;
dist:array[0..30000] of longint;
v:array[0..30000] of boolean;
procedure init;
begin
assign(input,'yy.in');
assign(output,'yy.out');
reset(input);
rewrite(output);
end;
procedure terminate;
begin
close(input);
close(output);
halt;
end;
procedure insert(a,b,c:longint);
var
p:pnode;
begin
new(p);
p^.d:=b;
p^.q:=c;
p^.next:=dian[a];
dian[a]:=p;
end;
procedure readdata;
var
m,i,a,b,c:longint;
begin
read(n,m);
for i:=1 to m do
begin
read(a,b,c);
insert(a,b,c);
insert(b,a,c);
end;
end;
procedure main;
var
i,j,k,min:longint;
p:pnode;
begin
fillchar(v,sizeof(v),0);
fillchar(dist,sizeof(dist),$7f);
dist[1]:=0;
for i:=1 to n do
begin
min:=maxlongint;
k:=0;
for j:=1 to n do
if (not(v[j])) and (dist[j]<min) then
begin
k:=j;
min:=dist[j];
end;
//if k=0 then break;
if k=n then
begin
writeln(dist[k]);
terminate;
end;
v[k]:=true;
p:=dian[k];
while p<>nil do
begin
if (not v[p^.d]) and(dist[p^.d]-dist[k]>p^.q) then
dist[p^.d]:=dist[k]+p^.q;
p:=p^.next;
end;
end;
writeln(dist[n]);
end;
begin
init;
readdata;
main;
terminate;
end.
显然你这个程序是超时的,从第9个点就能看出来。所以说第10个点不可能跑出来,12577实际上是第8个点的答案(拿个writeln(0)骗出所有答案就能发现),因为后两个点卡了,RQ的奇葩评测机直接截了第8个答案到第10个上