| 比赛 | 20161223 | 评测结果 | AAAAAAAAAA | 
    | 题目名称 | 哞投 | 最终得分 | 100 | 
    | 用户昵称 | Mealy | 运行时间 | 0.489 s | 
    | 代码语言 | C++ | 内存使用 | 0.32 MiB | 
    | 提交时间 | 2016-12-23 20:13:49 | 
显示代码纯文本
#include <iostream>
#include <cstdio>
#include <vector>
#include <algorithm>
#include <cmath>
#define pb push_back
using namespace std;
const int nmax=1086;
int n;
int ans=0;
class point
{
public:
	int x;
	int y;
}poi[nmax];
class edge
{
public:
	int u,v;
	int len;
};
vector<edge> edges;
class UFS
{
public:
	int p[nmax];
	void SetSet(int n)
	{
		for(int i=1;i<=n;i++)
			p[i]=i;
	}
	int Find(int x)
	{
		if(x==p[x])
			return x;
		else
		{
			p[x]=Find(p[x]);
			return p[x];
		}
	}
	void Merge(int x,int y)
	{
		int fx=Find(x);
		int fy=Find(y);
		p[fx]=fy;
	}
}f;
int GetLen(int a,int b)
{
	int tmpx=(poi[a].x-poi[b].x)*(poi[a].x-poi[b].x);
	int tmpy=(poi[a].y-poi[b].y)*(poi[a].y-poi[b].y);
	int tmplen=tmpx+tmpy;
	return tmplen;
}
void PreDo()
{
	scanf("%d",&n);
	for(int i=1;i<=n;i++)
	{
		scanf("%d%d",&poi[i].x,&poi[i].y);
	}
}
void SetG()
{
	for(int i=1;i<=n;i++)
	{
		for(int j=1;j<=n;j++)
		{
			if(i<j)
			{	
				int tmplen=GetLen(i,j);
				edges.pb((edge){i,j,tmplen});
			}
		}
	}
}
bool cmp(edge a,edge b)
{
	return a.len<b.len;
}
void MST()
{
	SetG();
	f.SetSet(n);
	sort(edges.begin(),edges.end(),cmp);
	for(int i=0;i<edges.size();i++)
	{
		if(f.Find(edges[i].u)!=f.Find(edges[i].v))
		{
			ans=max(edges[i].len,ans);
			f.Merge(edges[i].u,edges[i].v);
		}
	}
}
void Out()
{
	printf("%d",ans);
}
int main()
{
	freopen("moocast.in","r",stdin);
	freopen("moocast.out","w",stdout);
	PreDo();
	MST();
	Out();
	return 0;
}
/*
 
2577. 哞投
 
★   输入文件:moocast.in
 
*/