比赛 20120418s 评测结果 AAAAAAAAAA
题目名称 捉迷藏 最终得分 100
用户昵称 wo shi 刘畅 运行时间 0.000 s
代码语言 Pascal 内存使用 0.00 MiB
提交时间 2012-04-18 08:55:56
显示代码纯文本
var
  n,m,total,i,x,y,min,max,ans:longint;
  v:array[0..1000000]of boolean;
  point,next,first,d,q:array[0..3000000]of longint;

procedure addpage(x,y:longint);
begin
  inc(total);
  point[total]:=y;
  next[total]:=first[x];
  first[x]:=total;
end;

procedure spfa;
var
  i,h,t:longint;
begin
  for i:=1 to n do d[i]:=maxlongint div 2;
  d[1]:=0;
  t:=1;
  q[1]:=1;
  v[1]:=true;
  h:=0;
  while h<>t do
  begin
    h:=(h mod n)+1;
    x:=q[h];
    i:=first[x];
    v[x]:=false;
    while i>0 do
    begin
      y:=point[i];
      if d[x]+1<d[y] then
      begin
        d[y]:=d[x]+1;
        if not v[y] then
        begin
          t:=(t mod n)+1;
          q[t]:=y;
          v[y]:=true;
        end;
      end;
      i:=next[i];
    end;
  end;
end;

begin
  assign(input,'hideseek.in'); reset(input);
  assign(output,'hideseek.out'); rewrite(output);
  readln(n,m);
  for i:=1 to m do
  begin
    readln(x,y);
    addpage(x,y);
    addpage(y,x);
  end;
  spfa;
  max:=-maxlongint;
  ans:=0;
  min:=maxlongint;
  for i:=2 to n do
  begin
    if d[i]>max then
    begin
      max:=d[i];
      ans:=1;
      min:=i;
    end
    else if d[i]=max then inc(ans);
  end;
  writeln(min,' ',max,' ',ans);
  close(input);
  close(output);
end.