G65 线性基+贪心法 P4570 [BJWC2011] 元素

视频链接:G65 线性基+贪心法 P4570 [BJWC2011] 元素_哔哩哔哩_bilibili

 

P4570 [BJWC2011] 元素 - 洛谷 | 计算机科学教育新生态 (luogu.com.cn)

// 线性基+贪心法 O(60*n)
#include <iostream>
#include <cstring>
#include <algorithm>
using namespace std;

#define LL long long
const LL N=1005;
int n,m;
struct node{
  LL num,val;
}a[N],p[70];
LL ans;

bool cmp(node a,node b){
  return a.val>b.val;
}
void insert(node x){ //贪心法
  for(int i=60;i>=0;--i){
    if(x.num>>i&1){  //x第i位为1
      if(!p[i].num){ //不存在则加入
        p[i]=x;
        ans+=p[i].val;
        break;
      }
      x.num^=p[i].num; //存在则异或
    }
  }
}
int main(){
  cin>>n;
  for(int i=0;i<n;++i)
    cin>>a[i].num>>a[i].val;
  sort(a,a+n,cmp);
  for(int i=0;i<n;++i) insert(a[i]);
  cout<<ans<<endl;
}

 

posted @ 2024-07-10 20:47  董晓  阅读(31)  评论(0编辑  收藏  举报