[bzoj2460] [BeiJing2011]元素(线性基+贪心)

Posted elpsycongroo

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了[bzoj2460] [BeiJing2011]元素(线性基+贪心)相关的知识,希望对你有一定的参考价值。

题目大意: 有一些矿石,每个矿石有一个a和一个b值,要求选出一些矿石,b的和最大且不存在某个矿石子集它们的a的异或和为0.

解题关键:对魔力进行由大到小排序,依次加入线性基,统计即可。

#include<cstdio>
#include<cstring>
#include<algorithm>
#include<cstdlib>
#include<iostream>
#include<cmath>
using namespace std;
typedef long long ll;
const int MAX_BASE=63;
ll base[64],n,m;
struct node{
    ll x,y;
    bool operator<(const node &a)const{
        return y>a.y;
    }
}a[10006];
ll ans=0;
//构造线性基,也可用来判断x是否存在,最后返回是否等于0即可。
void getbase(){
  memset(base,0,sizeof base);
  for(int i=1;i<=n;i++){
      for(int j=MAX_BASE;j>=0;j--){
          if(a[i].x>>j){
              if(!base[j]){
                base[j]=a[i].x;
                ans+=a[i].y;
                break;
              }
              a[i].x^=base[j];
          }
      }
  }
}

int main(){
    cin>>n;
    for(int i=1;i<=n;i++)cin>>a[i].x>>a[i].y;
    sort(a+1,a+n+1);
    getbase();
    printf("%lld
",ans);
    return 0;
}

 

以上是关于[bzoj2460] [BeiJing2011]元素(线性基+贪心)的主要内容,如果未能解决你的问题,请参考以下文章

bzoj2460[BeiJing2011]元素

[BZOJ2460][BeiJing2011]元素

bzoj2460 BeiJing2011—元素

题解 bzoj2460: [BeiJing2011]元素 (线性基)

BZOJ 2460 [BeiJing2011]元素

BZOJ_2460_[BeiJing2011]元素_线性基