传送门:http://www.lydsy.com/JudgeOnline/problem.php?id=2460
贪心建立线性基即可
#include<stdio.h>
#include<algorithm>
typedef long long ll;
struct node
{
ll a;int b;
friend bool operator < (node a,node b){return a.b>b.b;}
}p[2001];
ll a[63];
int n,ans;
int main()
{
scanf("%d",&n);
for (int i=1;i<=n;i++) scanf("%lld%d",&p[i].a,&p[i].b);
std::sort(p+1,p+n+1);
for (int i=1;i<=n;i++)
{
for (int j=62;~j;j--) if (p[i].a>>j&1)
{
if (!a[j])
{
a[j]=p[i].a;
ans+=p[i].b;
break;
}
else p[i].a^=a[j];
}
}
printf("%d",ans);
}