题目
https://cn.vjudge.net/problem/HYSBZ-2460
题意
给你某些数 让你选一些数 使他们异或值不为0 并且权值最大
代码
#include <bits/stdc++.h>
using namespace std;
typedef long long ll;
const int maxn = 10004;
struct node
{
ll n;
int w;
}a[maxn];
ll lb[65];
bool cmp(const node& a,const node& b)
{
return a.w > b.w;
}
int main()
{
int n;
ll k;
cin>>n;
int ans = 0;
for(int i = 1;i <= n;i++)
cin>>a[i].n>>a[i].w;
sort(a+1,a+1+n,cmp);
for(int i = 1;i <= n;i++)
{
for(int j = 63;j >= 0;j--)
{
if((a[i].n>>j)&1)
{
if(!lb[j])
{
lb[j] = a[i].n;
break;
}
else a[i].n ^= lb[j];
}
}
if(a[i].n) ans += a[i].w;
}
printf("%d\n",ans);
return 0;
}