题面:
思路:
二分,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.