记录编号 159221 评测结果 AAAAAAAAAA
题目名称 超牛冠军赛 最终得分 100
用户昵称 Gravatar清羽 是否通过 通过
代码语言 C++ 运行时间 2.500 s
提交时间 2015-04-20 13:04:15 内存使用 0.34 MiB
显示代码纯文本
#include<cstdio>
#include<iostream>
#include<cstring>
#include<vector>
#include<algorithm>
using namespace std;

const long long maxn=2000;

struct Edge{
	long long from,to,dist;
	
	bool operator <(const Edge& x) const{
		return dist>x.dist;
	}
	Edge(long long u,long long v,long long w):from(u),to(v),dist(w) {}
};

char buf[40];
vector<Edge> edges;
long long n,w[maxn],p[maxn];

template<class T> inline bool getd(T& x)
{
	long long ch=getchar();
	bool neg=false;
	while(ch!=EOF && ch!='-' && !isdigit(ch)) ch=getchar();
	if(ch==EOF) return false;
	if(ch=='-'){
		ch=getchar();
		neg=true;
	}
	x=ch-'0';
	while(isdigit(ch=getchar())) x=x*10+ch-'0';
	if(neg) x=-x;
	return true;
}

template<class M> inline void putd(M x)
{
	long long p=0;
	if(x<0){
		putchar('-');
		x=-x;
	}
	if(x==0) buf[p++]=0;
	while(x){
		buf[p++]=x%10;
		x/=10;
	}
	for(long long i=p-1;i>=0;i--) putchar(buf[i]+'0');
}

long long getfather(long long x){ return p[x]==x?x:p[x]=getfather(p[x]); }

void init()
{
	getd(n);
	for(long long i=0;i<n;i++) getd(w[i]);
	for(long long i=0;i<n;i++)
		for(long long j=i+1;j<n;j++) 
			edges.push_back(Edge(i,j,w[i]^w[j]));
}

void work()
{
	for(long long i=0;i<n;i++) p[i]=i;
	sort(edges.begin(),edges.end());
	long long cnt=0,ans=0;
	
	for(long long i=0;i<edges.size();i++){
		Edge e=edges[i];
		long long x=getfather(e.from),y=getfather(e.to);
		if(x==y) continue;
		p[x]=y;	
		ans+=e.dist;
		if(++cnt==n-1) break;
	}
	putd(ans);
}

int main()
{
	freopen("superbull.in","r",stdin);
	freopen("superbull.out","w",stdout);
	init();
	work();
	fclose(stdin);
	fclose(stdout);
	return 0;
}