Loading

线性基学习笔记(咕咕咕)

他人博客

数学严谨证明

超详细讲解

例题

Luogu P3812【模板】线性基

真的只是模板,上线性基简单写法:

#include<bits/stdc++.h>
using namespace std;
#define int long long
int const MAXN=1000,MAXL=60;
int n;
int p[MAXN];
struct LinearBasis{
    long long a[MAXL+1];
    void insert(int x){
        for(int i=MAXL;i>=0;i--){
            if( !(x & (1LL<<i) ) )continue;
            if(!a[i])return (void)(a[i]=x);
            x ^= a[i];
        }
    }
    int query_max(){
        int ans=0;
        for(int i=MAXL;i>=0;i--)ans=max(ans,ans^a[i]);
        return ans;
    }
}LB;
signed main(){
    scanf("%lld",&n);
    for(int i=1;i<=n;i++){
        scanf("%lld",&p[i]);
        LB.insert(p[i]);
    }       
    printf("%lld\n",LB.query_max());
    return 0;
}

Nowcoder 2019NOIP暑假7天营Day4 清新题

就比模板加了一个合并操作

#include<bits/stdc++.h>
using namespace std;
int const MAXN=1e5+10,MAXL=20;
int n,tot,m,ans;
int h[MAXN],p[MAXN];
struct LB{
    int a[MAXL],sum;
    void insert(int x){
        for(int i=MAXL;i>=0;i--){
            if(x & (1LL<<i)){
                if(!a[i]){a[i]=x;return;}
                x^=a[i];
            }
        }
    }
    void get_max(){
        sum=0;
        for(int i=MAXL;i>=0;i--)sum=max(sum,sum^a[i]);
    }
    void merge(const LB &b){
        for(int i=0;i<=MAXL;i++)if(b.a[i])insert(b.a[i]);
    }
}lb[MAXN];
struct edge{
    int to,next;
}e[MAXN<<1+1];
void add(int u,int v){
    e[++tot].to=v,e[tot].next=h[u],h[u]=tot;
}
void dfs(int rt,int fa){
    lb[rt].insert(p[rt]);
    for(int i=h[rt];i;i=e[i].next){
        if(e[i].to!=fa){
            dfs(e[i].to,rt);
            lb[rt].merge(lb[e[i].to]);
        }
    }
    lb[rt].get_max();
    return;
}
int main(){
    scanf("%d",&n);
    for(int i=1;i<=n-1;i++){
        int x,y;
        scanf("%d%d",&x,&y);
        add(x,y);add(y,x);
    }
    for(int i=1;i<=n;i++)scanf("%d",&p[i]);
    dfs(1,-1);
    scanf("%d",&m);
    for(int i=1;i<=m;i++){
        int x;scanf("%d",&x);
        printf("%d\n",lb[x].sum);
    }
    return 0;
}

Luogu 幸运数字

到时候填

posted @ 2019-08-24 15:54  fpjo  阅读(134)  评论(0编辑  收藏  举报