链接:https://www.luogu.com.cn/problem/P4570

线性基最重要的性质
1、原序列任意数字,都可由线性基异或得到。
2、线性基不可能异或得到0
3、无论怎么用原序列对线性基进行插入,得到的线性基是一定的。

题目分析:由于线性基不可能为0,而线性基已经满足不会异或到0且最大的条件(不然可以继续往线性基里插入元素)
那么这时即可贪心,按权值排序,如果能插入则更新答案

#include <bits/stdc++.h>
using namespace std;
typedef long long ll;
int n;
const int N = 1e5 + 10;
struct node{
    ll a,b;
    bool operator <(const node &w)const{
        return b > w.b;
    }
}tr[N];
int p[64];
bool insert(ll x){
    for(int i=63;i>=0;i--){
        if(!(x >> i)) continue;
        if(!p[i]){
            p[i] = x;
            return 1;
        }
        x ^= p[i];
    }
    return 0;
}
int main(){
    cin >> n;
    for(int i=1;i<=n;i++){
        cin >> tr[i].a >> tr[i].b;
    }
    sort(tr+1,tr+1+n);
    ll ans = 0;
    for(int i=1;i<=n;i++){
        if(insert(tr[i].a)) ans += tr[i].b;
    }
    cout << ans << endl; 
    return 0;
}