zoukankan      html  css  js  c++  java
  • 线性基学习笔记(咕咕咕)

    他人博客

    数学严谨证明

    超详细讲解

    例题

    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
    ",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
    ",lb[x].sum);
        }
        return 0;
    }
    

    Luogu 幸运数字

    到时候填

  • 相关阅读:
    progID
    windbg
    msil_accessibility_b03f5f7f11d50a3a_6.1.7600.16385_none_2232298e4f48d6ba
    jupybook编程快捷键
    django遇到的error(待续)
    python 遇到error(待续)
    前端 遇到error(待续)
    sql语句组件 在框架中的应用
    django models分页
    Python的学习之旅———用户与程序交互
  • 原文地址:https://www.cnblogs.com/fpjo/p/11404930.html
Copyright © 2011-2022 走看看