zoukankan      html  css  js  c++  java
  • BZOJ2115: [Wc2011] Xor

    题目:http://www.lydsy.com/JudgeOnline/problem.php?id=2115

    一条路径就是一条1到n的路径加上一坨环。因为是xor运算就二进制拆位,维护61个向量的线性基就可以了。

    #include<cstring>
    #include<cstdio>
    #include<iostream>
    #include<algorithm>
    #include<cmath>
    #include<queue>
    #include<map>
    #define rep(i,l,r) for (int i=l;i<=r;i++)
    #define down(i,l,r) for (int i=l;i>=r;i--)
    #define clr(x,y) memset(x,y,sizeof(x))
    #define inf int(1e9)
    #define maxn 100500
    #define mm 1000000007
    #define ll long long
    using namespace std;
    struct data{int obj,pre; ll c;
    }e[maxn*2];
    int n,m,tot,cnt,cir,head[maxn],vis[maxn];
    ll d[maxn],ans,a[500500];
    ll bin[65];
    int read(){
        int x=0,f=1; char ch=getchar();
        while (!isdigit(ch)) {if (ch=='-') f=-1; ch=getchar();}
        while (isdigit(ch)) {x=x*10+ch-'0'; ch=getchar();}
        return x*f;
    }
    void insert(int x,int y,ll z){
        e[++tot].obj=y; e[tot].c=z; e[tot].pre=head[x]; head[x]=tot;
    }
    void dfs(int u){
        vis[u]=1;
        for (int j=head[u];j;j=e[j].pre){
            int v=e[j].obj;
            if (!vis[v]) d[v]=d[u]^e[j].c,dfs(v);
            else a[++cir]=d[v]^d[u]^e[j].c;
        }
    }
    void gs(){
        int tmp;
        down(i,60,0){
            ll now=bin[i];
            tmp=cnt+1;
            while (tmp<=cir&&!(a[tmp]&now)) tmp++;
            if (tmp==cir+1) continue;
            cnt++;
            swap(a[cnt],a[tmp]);
            rep(j,1,cir) if (j!=cnt&&(a[j]&now)) a[j]^=a[cnt];
        }
    }
    int main(){
        n=read(); m=read();
        bin[0]=1; rep(i,1,60) bin[i]=bin[i-1]<<1;
        ll z;
        rep(i,1,m){
            int x=read(),y=read(); scanf("%lld",&z);
            insert(x,y,z); insert(y,x,z);
        }
        dfs(1); gs();
        ans=d[n];
        rep(i,1,cnt) ans=max(ans,ans^a[i]);
        printf("%lld
    ",ans);
        return 0;
    }
  • 相关阅读:
    linux下shell显示-bash-4.1#不显示路径解决方法
    update chnroute
    An error "Host key verification failed" when you connect to other computer by OSX SSH
    使用dig查询dns解析
    DNS被污染后
    TunnelBroker for EdgeRouter 后记
    mdadm详细使用手册
    关于尼康黄的原因
    Panda3d code in github
    Python实例浅谈之三Python与C/C++相互调用
  • 原文地址:https://www.cnblogs.com/ctlchild/p/5050857.html
Copyright © 2011-2022 走看看