记录编号 21522 评测结果 AAAAAAAAAA
题目名称 奶牛派对 最终得分 100
用户昵称 Gravatarnick09 是否通过 通过
代码语言 Pascal 运行时间 0.213 s
提交时间 2010-11-11 09:49:27 内存使用 3.95 MiB
显示代码纯文本
{用SPFA求出点X到所有点的最短距离和所有点到X的最短距离}
program jfl;
type arr=array[1..1000]of longint;
var i,j,a,b,t,n,m,x,k,max,h:longint;
    g:array[0..1000,0..1000]of longint;
    d1,d2,q:array[0..1000]of longint;
    v:array[0..1000]of boolean;
begin
assign(input,'party.in');
reset(input);
assign(output,'party.out');
rewrite(output);

readln(n,m,x);
filldword(g,sizeof(g)div 4,maxint);
for i:=1 to m do
begin
    readln(a,b,t);
    if t<g[a,b] then g[a,b]:=t;
end;

filldword(d1,sizeof(d1)shr 2,maxlongint);
fillchar(q,sizeof(q),0);
fillchar(v,sizeof(v),false);
h:=0;
t:=1;
q[t]:=x;
v[x]:=true;
d1[x]:=0;
while h<>t do
begin
    h:=(h mod n)+1;
    k:=q[h];
    v[k]:=false;
    for i:=1 to n do
      if d1[k]+g[k,i]<d1[i] then
      begin
        d1[i]:=d1[k]+g[k,i];
        if not v[i] then
        begin
          t:=(t mod n)+1;
          q[t]:=i;
          v[i]:=true;
        end;
      end;
end;

filldword(d2,sizeof(d2) shr 2,maxlongint);
fillchar(q,sizeof(q),0);
fillchar(v,sizeof(v),false);
h:=0;
t:=1;
q[t]:=x;
v[x]:=true;
d2[x]:=0;
while h<>t do
begin
    h:=(h mod n)+1;
    k:=q[h];
    v[k]:=false;
    for i:=1 to n do
      if d2[k]+g[i,k]<d2[i] then
      begin
        d2[i]:=d2[k]+g[i,k];
        if not v[i] then
        begin
          t:=(t mod n)+1;
          q[t]:=i;
          v[i]:=true;
        end;
      end;
end;

max:=0;
for i:=1 to n do
    if d2[i]+d1[i]>max then
      max:=d2[i]+d1[i];
writeln(max);
close(input);
close(output);
end.