比赛 20161223 评测结果 AAAAAAAAAA
题目名称 哞投 最终得分 100
用户昵称 Arrow 运行时间 0.464 s
代码语言 C++ 内存使用 6.17 MiB
提交时间 2016-12-23 20:55:41
显示代码纯文本
#include<iostream>
#include<cstdio>
#include<utility>
#include<algorithm>
using namespace std;
namespace IO{
	char buf[1<<15],*fs,*ft;
	inline char gc(){return (fs==ft&&(ft=(fs=buf)+fread(buf,1,1<<15,stdin),fs==ft))?0:*fs++;}
	inline int read(){
		int x=0,rev=0,ch=gc();
		while(ch<'0'||ch>'9'){if(ch=='-')rev=1;ch=gc();}
		while(ch>='0'&&ch<='9'){x=(x<<1)+(x<<3)+ch-'0';ch=gc();}
		return rev?-x:x;
	}
}using namespace IO;
pair <int,int> cow[1010];
int fa[1010]={0};
struct dis
{
	int u;
	int v;
	int w;
}edge[499510];
int cal(int x,int y)
{
	return x*x+y*y;
}
bool cmp(dis x,dis y)
{
	return x.w<y.w;
}
int find(int x)
{
	if(fa[x]!=x) return fa[x]=find(fa[x]);
	return x;
}
int main()
{
	freopen("moocast.in","r",stdin);
	freopen("moocast.out","w",stdout);
	int n,m=0,k=0,ans=0;
	n=read();
	for(int i=1;i<=n;i++)
	{
		int h=read(),z=read();
		cow[i]=make_pair(h,z);
	}
	for(int i=1;i<=n;i++)
	{
		for(int j=i+1;j<=n;j++)
		{
			edge[m].u=i;
			edge[m].v=j;
			edge[m].w=cal(cow[i].first-cow[j].first,cow[i].second-cow[j].second);
			m++;
		}
	}
	sort(edge,edge+m,cmp);
	for(int i=1;i<=n;i++)
		fa[i]=i;
	int i=0;
	while(k<n-1)
	{
		int fau=find(edge[i].u),fav=find(edge[i].v);
		if(fav!=fau)
		{
			fa[fav]=fa[fau];
			if(edge[i].w>ans)
				ans=edge[i].w;
			k++;
		}
		i++;
	}
	printf("%d\n",ans);
return 0;
}