方法:拟阵+极大线性无关组
解析:
题解同上篇
代码:
#include <cstdio>
#include <cstring>
#include <iostream>
#include <algorithm>
#define N 1100
using namespace std;
typedef long long ll;
struct node
{
ll no;
int val;
}a[N];
int b[110];
int n;
int cmp(node a,node b)
{
return a.val>b.val;
}
int main()
{
scanf("%d",&n);
for(int i=1;i<=n;i++)
scanf("%lld%d",&a[i].no,&a[i].val);
sort(a+1,a+n+1,cmp);
int ans=0;
for(int i=1;i<=n;i++)
{
for(int j=62;j>=0;j--)
{
if(a[i].no&(1ll<<j))
{
if(!b[j])
{
b[j]=i;
ans+=a[i].val;
break;
}else a[i].no^=a[b[j]].no;
}
}
}
printf("%d\n",ans);
}