预处理对局情况跑了个最大生成树,除了第一个点都WA了(我太菜了)
#include<bits/stdc++.h>
#define ll long long
using namespace std;
const int maxn=4e6+10;
int n,m;
ll fa[maxn],h[maxn],id[maxn];
struct node{
int u,v,w;
}q[maxn];
int find_root(int x){
if(fa[x]==x) return x;
return fa[x]=find_root(fa[x]);
}
bool cmp(node a,node b){
return a.w>b.w;
}
int main(){
scanf("%d",&n);
for(int i=1;i<=n;i++){
fa[i]=i;
}
for(int i=1;i<=n;i++){
scanf("%lld",&id[i]);
}
int cnt=0;
for(int i=1;i<=n;i++){
for(int j=i+1;j<=n;j++){
q[++cnt].u=i;
q[cnt].v=j;
q[cnt].w=id[i]^id[j];
}
}
sort(q+1,q+1+cnt,cmp);
int ans=0;
int cnt1=0;
for(int i=1;i<=cnt;i++){
int x=find_root(q[i].u);
int y=find_root(q[i].v);
if(x!=y){
ans+=q[i].w;
fa[x]=y;
cnt1++;
}
if(cnt1==n-1) break;
}
printf("%lld",ans);
return 0;
}