BZOJ 2115 Xor(dfs&独立回路&异或消元)

原创 2015年11月17日 16:27:11

学习的秦总的写法写的dfs找独立回路和异或消元:秦总博客

独立回路的定义和独立回路个数=MN+1的证明,博客里面都有,但是dfs找的过程好像需要2倍的空间,不能理解。。。

分析:这题要明白一个东西,u>v的所有路径可以由u>v的一条任意路径+该图的所有独立回路的线性组合完成,其实想一想还是很好理解的,有一点很重要:比如1>7是一条路,然后怎么进过回路2>3,3>4,4>2,因为整个图是连通的,所以17点必然有一个点在一个回路里面,这样这个回路走两遍就不影响异或值了,这个时候回路上面的所有点又可以走一个回路,所以如果一直这样拓展一定能够走到2>3,3>4,4>2这条回路,并且其他回路都自己抵消了。

附上代码:

#include <bits/stdc++.h>
#define LL long long
#define FOR(i,x,y)  for(int i = x;i < y;++ i)
#define IFOR(i,x,y) for(int i = x;i > y;-- i)

using namespace std;

const int maxn = 50050;
const int maxm = 100010;

int head[maxn],edge_cnt;

struct Edge{
    int u,v,nt;
    LL val;
}edge[maxm<<1];

void add_edge(int u,int v,LL val){
    edge[edge_cnt].u = u;
    edge[edge_cnt].v = v;
    edge[edge_cnt].val = val;
    edge[edge_cnt].nt = head[u];
    head[u] = edge_cnt++;
}

int n,m,tot;

LL val[maxm<<1];
LL d[maxn];
bool vis[maxn];

void Build_Graph(){
    memset(vis,false,sizeof(vis));
    edge_cnt = 0;
    memset(head,-1,sizeof(head));
    int u,v;
    LL val;
    FOR(i,0,m){
        scanf("%d%d%lld",&u,&v,&val);
        add_edge(u,v,val);
        add_edge(v,u,val);
    }
}

void dfs(int u,int fa){
    vis[u] = true;
    for(int i = head[u];i != -1;i = edge[i].nt){
        int v = edge[i].v;
        if(v == fa) continue;
        if(!vis[v]){
            d[v] = d[u] ^ edge[i].val;
            dfs(v,u);
        }
        else{
            val[tot++] = d[u]^d[v]^edge[i].val;
        }
    }
}

int xorguass(){
    int row = 0;
    for(int i = 62;i >= 0;-- i){
        int j;
        for(j = row;j < tot;++ j) {
            if(val[j] & (1LL<<i)) break;
        }
        if(j != tot){
            swap(val[j],val[row]);
            for(j = 0;j < tot;++ j){
                if(j == row)    continue;
                if(val[j] & (1LL<<i)){
                    val[j] ^= val[row];
                }
            }
            ++ row;
        }
    }
    return row;
}

void work(){
    LL ans = d[n];
    n = xorguass();
    FOR(i,0,n)  ans = max(ans,ans^val[i]);
    printf("%lld\n",ans);
}
int main()
{
    //freopen("test.in","r",stdin);
    while(~scanf("%d%d",&n,&m)){
        Build_Graph();
        tot = 0;
        d[1] = 0;
        dfs(1,-1);
        work();
    }
    return 0;
}

版权声明:本文为博主原创文章,未经博主允许不得转载。

【BZOJ2115】【Wc2011】 Xor 线性基 异或最长路

题意:找一条异或最长路。 题解:先随便来一条路径,然后我们发现这条路径上可以随便加简单环(不管有没有共点共边)、 就是因为可以先从某点走到环上来一圈再走回来,这样来去的路径被搞没了,简直污得不行。...
  • Vmurder
  • Vmurder
  • 2015年02月02日 16:48
  • 1431

简单多层神经网络实现异或XOR

最近在看《Neural Network Design_Hagan》 然后想自己实现一个XOR 的网络。 由于单层神经网络不能将异或的判定分为两类。 根据 a^b=(a&~b)|(~a&b) 而...
  • u011042188
  • u011042188
  • 2015年08月07日 21:38
  • 5793

XOR 异或的性质及应用

异或的性质及运用  异或是一种基于二进制的位运算,用符号XOR或者 ^ 表示,其运算法则是对运算符两侧数的每一个二进制位,同值取0,异值取1。它与布尔运算的区别在于,当运算符两侧均为1时,布尔...
  • u013797029
  • u013797029
  • 2015年01月23日 12:18
  • 1155

BZOJ 2115 Wc2011 Xor DFS+高斯消元

题目大意:给定一个无向图,每条边上有边权,求一条1到n的路径,使路径上权值异或和最大 首先一条路径的异或和可以化为一条1到n的简单路径和一些简单环的异或和 我们首先DFS求出任意一条1到n的简单路径以...
  • PoPoQQQ
  • PoPoQQQ
  • 2014年10月05日 17:00
  • 1677

[BZOJ2115][Wc2011] Xor(dfs+高斯消元求线性基+贪心)

题目描述传送门题解挺好的一道思路题… 首先一条路径一定可以分解成一条简单路径和若干环的异或值 只需要dfs一遍所有能dfs到的环,剩余的环都可以通过其它的环组合(异或)得到 而简单路径可以是任意...
  • Clove_unique
  • Clove_unique
  • 2017年01月13日 21:48
  • 317

HDU 5544 Ba Gua Zhen (dfs&独立回路&异或消元)

这道题和BZOJ 2115 基本一样,容易一点,直接存个代码:这个代码要好看一点(好像并没有什么区别。。。)#include #define LL long long #define FOR(i,...
  • u014610830
  • u014610830
  • 2015年11月17日 16:31
  • 624

bzoj 2115: [Wc2011] Xor (高斯消元求解线性基)

2115: [Wc2011] Xor Time Limit: 10 Sec  Memory Limit: 259 MB Submit: 2081  Solved: 868 [Submit][Statu...
  • clover_hxy
  • clover_hxy
  • 2016年04月24日 16:22
  • 229

BZOJ 2115 [Wc2011] Xor 高斯消元

BZOJ 2115 [Wc2011] Xor 高斯消元
  • wzq_QwQ
  • wzq_QwQ
  • 2015年07月18日 08:29
  • 1182

BZOJ 2115|WC 2010|Xor|高斯消元

无向联通图上的路径使其边权Xor和最大。考虑一个路径,发现其由树边和非树边组成(SAM证明线性的时候也用到了这个) 树边可以很容易地xor出来啦,非树边呢? 由于非树边的两端点总在树上,因此1条非...
  • huanghongxun
  • huanghongxun
  • 2016年04月22日 20:30
  • 365

【高斯消元】【图论】[BZOJ2115]Xor高斯消元

题目描述题目解析首先如果直接思考那么我们不容易得到答案,那么我们换一种思路,我们先解决这个问题的弱化版本,我们考虑在无向图GG中知道SS和TT如何去寻找最大的环路首先我们根据其中一个点(这里选择SS)...
  • JeremyGJY
  • JeremyGJY
  • 2016年01月31日 16:41
  • 367
内容举报
返回顶部
收藏助手
不良信息举报
您举报文章:BZOJ 2115 Xor(dfs&独立回路&异或消元)
举报原因:
原因补充:

(最多只允许输入30个字)