{思路:利用FLOYD算法求出所有结点的最短路径矩阵, 然后求出每个结点到其他的结点的距离总合,取最小的那个} program capital; const maxn=100; var n,m,k,i,j:integer; min,sum:longint; dist:array[1..maxn,1..maxn] of longint; {prev:array[1..maxn,1..maxn] of 0..maxn;} {因为无需知道路径,因此略去计算前驱的数组} procedure init; var m,i,u,v:integer; begin assign(input,'capital.in'); reset(input); assign(output,'capital.out'); rewrite(output); readln(n,m); {fillchar(prev,sizeof(prev),0);} for u:=1 to n do for v:=1 to n do dist[u,v]:=1000000000; for i:=1 to m do begin readln(u,v,dist[u,v]); dist[v,u]:=dist[u,v]; {prev[u,v]:=u; prev[v,u]:=v;} end; {readln(s,t);} end; procedure floyd; var i,j,k:integer; begin for k:=1 to n do for i:=1 to n do for j:=1 to n do if (dist[i,k]+dist[k,j]',j); end; end;} begin init; floyd; min:=100000000; for i:=1 to n do begin sum:=0; for j:=1 to n do if i<>j {自己到自己的路径不能计算在内} then sum:=sum+dist[i,j]; if min>sum then begin min:=sum; k:=i; end; end; write(k); close(input); close(output); end. //delphi/7193