看了题解,感觉跟题解写的差不多呀,实在是不明白了
#include<algorithm>
#include<iostream>
#include<cstring>
#include<cstdio>
#include<cctype>
#define ll long long
#define gc getchar
#define maxn 1005
#define maxm 65
using namespace std;
inline ll read(){
ll a=0;int f=0;char p=gc();
while(!isdigit(p)){f|=p=='-';p=gc();}
while(isdigit(p)){a=(a<<3)+(a<<1)+(p^48);p=gc();}
return f?-a:a;
}int n,ans;
ll d[maxm];
struct ahaha{
int w;ll a;
inline bool friend operator<(const ahaha x,const ahaha y){
return x.w>y.w;
}
}a[maxn];
int main(){
n=read();
for(int i=1;i<=n;++i)
a[i].a=read(),a[i].w=read();
sort(a+1,a+n+1);
for(int i=1;i<=n;++i)
for(int j=62;~j;--j)
if((1<<j)&a[i].a)
if(d[j])a[i].a^=d[j];
else{
d[j]=a[i].a;
ans+=a[i].w;
break;
}
printf("%d\n",ans);
return 0;
}