[luogu4570]元素
根据魔法值从大到小插入到线性基中,然后即输出线性基中的所有数之和
1 #include<bits/stdc++.h> 2 using namespace std; 3 #define ll long long 4 struct ji{ 5 ll id; 6 int k; 7 bool operator < (const ji &a)const{ 8 return k>a.k; 9 } 10 }b[1005]; 11 int n,ans; 12 ll a[101]; 13 void add(ll k,int t){ 14 for(int i=62;i>=0;i--) 15 if (k&(1LL<<i)){ 16 if (!a[i]){ 17 a[i]=k; 18 ans+=t; 19 return; 20 } 21 k^=a[i]; 22 } 23 } 24 int main(){ 25 scanf("%d",&n); 26 for(int i=1;i<=n;i++)scanf("%lld%d",&b[i].id,&b[i].k); 27 sort(b+1,b+n+1); 28 for(int i=1;i<=n;i++)add(b[i].id,b[i].k); 29 printf("%d",ans); 30 }