比赛 20161223 评测结果 AAAAAAAAAA
题目名称 哞投 最终得分 100
用户昵称 kxxy 运行时间 0.249 s
代码语言 C++ 内存使用 0.33 MiB
提交时间 2016-12-23 20:23:38
显示代码纯文本
#include<iostream>
#include<cstdio>
#include<queue>
#include<cstring>
using namespace std;
int n;
struct P
{
	int x,y;
}cow[1010];
int f[1010];
bool vis[1010];
queue<int>q;
inline int inside(int fro,int to,int X)
{
	return (cow[fro].x-cow[to].x)*(cow[fro].x-cow[to].x)+(cow[fro].y-cow[to].y)*(cow[fro].y-cow[to].y)<=X;
}
inline int check(int mid)
{
	memset(vis,0,sizeof(vis));
	q.push(1);
	vis[1]=1;
	int cnt=1;
	while(!q.empty())
	{
		int cd=q.front();
		q.pop();	
		for(int i=1;i<=n;i++)
		{
			if(i==cd)
				continue;
			if(inside(cd,i,mid)&&!vis[i])
			{
				q.push(i);
				vis[i]=1;
				cnt++;
			}
		}
	}
	return cnt==n;
}
int main()
{
	freopen("moocast.in","r",stdin);
	freopen("moocast.out","w",stdout);
	int l=0,r,maxx=-1,maxy=-1;
	scanf("%d",&n);
	for(int i=1;i<=n;i++)
		f[i]=i;
	for(int i=1;i<=n;i++)
	{
		scanf("%d%d",&cow[i].x,&cow[i].y);
		maxx=max(maxx,cow[i].x);
		maxy=max(maxy,cow[i].y);
	}
	r=maxx*maxx+maxy*maxy;
	int mid=(l+r)>>1;
	while(l+1<r)
	{
		mid=(l+r)>>1;
		if(check(mid))
			r=mid;
		else
			l=mid;
	}
	if(check(l))
		mid=l;
	else
		mid=r;
	printf("%d",mid);
	return 0;
}