题目链接
题解
贪心维护线性基..
直接(1 << x)会爆int,很惨
代码
#include<cstdio>
#include<iostream>
#include<algorithm>
#define LL long long
LL read() {
LL x = 0,f = 1;
char c = getchar();
while(c < '0' || c >'9')c = getchar();
while(c <= '9' && c >= '0')x = x * 10 + c - '0',c = getchar();
return x;
}
struct node {
LL a;int b;
bool operator < (const node &x)const {
return b > x.b;
}
} a[1007];
int b[67];
LL bin[67];
int main() {
bin[0] = 1;for(int i = 1;i <= 63;++ i) bin[i] = bin[i - 1] << 1;
int n = read();
int ans = 0;
for(int i = 1;i <= n;++ i) a[i].a = read(),a[i].b = read();
std::sort(a + 1,a + n +1);
for(int i = 1;i <= n;++ i) {
for(LL j = 63;j >= 0;-- j) {
if(a[i].a & bin[j]) {
if(!b[j]) { b[j] = i;break;}
else a[i].a ^= a[b[j]].a;
}
}
if(a[i].a) ans += a[i].b;
}
printf("%d
",ans);
return 0;
}