[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 }
View Code

 

posted @ 2019-08-07 19:54  PYWBKTDA  阅读(87)  评论(0编辑  收藏  举报