[BJWC2011] 元素 - 线性基,贪心

Posted mollnn

tags:

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

Description

(n) 个元素,每个元素有个序号和一个值,一个元素可以选择当且尽当其序号与已选元素序号的异或和不为 (0),求你可选择的元素值和的最大值。

Solution

容易发现,要求的就是值和最大的(序号)线性无关组

考虑贪心,将值大的放在前面,然后能放入线性基就放入线性基即可

#include <bits/stdc++.h>
using namespace std;

#define int long long
const int N = 10005;

struct linearbase {
    int a[64];
    bool insert(int k) {
        for(int j=63; j>=0; --j)
            if((k>>j)&1ll)
                if(a[j]==0) {a[j]=k;return true;}
                else k^=a[j];
        return false;
    }
} l;

int n;

struct ks {
    int x,y;
    bool operator < (const ks &b) {
        return y>b.y;
    }
} a[N];

signed main() {
    ios::sync_with_stdio(false);
    cin>>n;
    for(int i=1;i<=n;i++) {
        int x,y;
        cin>>x>>y;
        a[i]={x,y};
    }
    int ans=0;
    sort(a+1,a+n+1);
    for(int i=1;i<=n;i++) {
        if(l.insert(a[i].x)) ans+=a[i].y;
    }
    cout<<ans;
}

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

线性基 P4570 [BJWC2011]元素

[BJWC2011]元素 线性基

[BJWC2011]元素

p4570 [BJWC2011]元素

[BJWC2011]元素

[BJWC2011]元素