题面:

 

思路:

        二分,dfs

 

代码:

uses math;
var vis,x,y:array[0..2005] of longint;
 ans,n,i,j,l,r,mid:longint;

function dis(xx,yy,a,b:longint):longint;
 begin
  exit(abs(xx-a)+abs(yy-b));
 end;

function dfs(now,xx:longint):boolean;
 var i,p:longint;
 begin
  for i:=1 to n do
   begin
    if now=xx then continue;
    p:=dis(x[i],y[i],x[now],y[now]);
    if (p<=xx*2) and (vis[i]=0) then
     begin
      vis[i]:=1;
      dfs(i,xx);
     end;
   end;
 end;

function check(x:longint):boolean;
 var i:longint;
 begin
  dfs(1,x);
  vis[1]:=1;
  for i:=1 to n do
   if vis[i]=0 then exit(false);
  exit(true);
 end;

begin

assign(input,'ppg.in');
reset(input);
assign(output,'ppg.out');
rewrite(output);

read(n);
for i:=1 to n do
 begin
  read(x[i]); read(y[i]);
 end;

l:=0; r:=maxlongint;
while l<=r do
 begin
  mid:=(l+r) div 2;
  fillchar(vis,sizeof(vis),0);
  if check(mid) then r:=mid-1 else l:=mid+1;
 end;

write(l);

close(input);close(output);

end.

 

posted on 2018-10-05 15:21  Tolye  阅读(152)  评论(0编辑  收藏  举报