Description

Input

第一行包含两个整数N和 M, 表示该无向图中点的数目与边的数目。 接下来M 行描述 M 条边,每行三个整数Si,Ti ,Di,表示 Si 与Ti之间存在 一条权值为 Di的无向边。 图中可能有重边或自环。

Output

仅包含一个整数,表示最大的XOR和(十进制结果),注意输出后加换行回车。

  这道题好像是很久以前学线性基的时候留下的……现在来填个坑……

  首先,由于异或有一个很好的性质,就是两个相同的数异或起来等于零。所以,一条边重复走两遍不会对答案产生贡献。这启示我们可以从一个点$u$走到点$v$,在$v$所在的一个环上走一圈,再走回到$u$,就可以得到$v$所在环的异或和。这样的话,我们就可以随意抠一条$1$到$n$的路径出来,假如异或和为$ans$,问题就转化这样了:有一个数$ans$和一些数(这些数就是每个环的异或和),可以选择是否异或上每个数,求$ans$的最大值。

  然后,我们要找出所有的环显然不现实。但是,我们可以发现所有环的异或和可以由一些环来得到。所以,在$dfs$的时候,一条非树边所连接的两个点加上这条非树边构成了一个环,我们把这种环全部找出来,所有环的异或和就都可以由这些环的异或和异或得到。所以,我们对这些异或和建立一个线性基,最后更新一下$ans$就可以了。

  下面贴代码(其实只有一遍$dfs$和一个线性基):

#include<iostream>
#include<cstdio>
#include<cstring>
#include<algorithm>
#include<cmath>
#define File(s) freopen(s".in","r",stdin),freopen(s".out","w",stdout)
#define maxn 50010
#define maxm 200010 using namespace std;
typedef long long llg; int n,m,head[maxn],next[maxm],to[maxm],tt;
llg c[maxm],dis[maxn],p[64],ans;
bool vis[maxn]; int getint(){
int w=0;bool q=0;
char c=getchar();
while((c>'9'||c<'0')&&c!='-') c=getchar();
if(c=='-') c=getchar(),q=1;
while(c>='0'&&c<='9') w=w*10+c-'0',c=getchar();
return q?-w:w;
} void link(int x,int y){
to[++tt]=y;next[tt]=head[x];head[x]=tt;
to[++tt]=x;next[tt]=head[y];head[y]=tt;
scanf("%lld",&c[tt]); c[tt-1]=c[tt];
} void push(llg x){
for(int i=62;i>=0;i--)
if(x&(1LL<<i))
if(p[i]) x^=p[i];
else{p[i]=x;break;}
} void dfs(int u,int fa){
vis[u]=1;
for(int i=head[u],v;v=to[i],i;i=next[i])
if(v!=fa)
if(!vis[v]) dis[v]=dis[u]^c[i],dfs(v,u);
else push(dis[u]^dis[v]^c[i]);
} int main(){
File("a");
n=getint(); m=getint();
while(m--) link(getint(),getint());
dfs(1,0); ans=dis[n];
for(int i=62;i>=0;i--)
if((ans^p[i])>ans) ans^=p[i];
printf("%lld",ans);
return 0;
}

BZOJ 2115 【Wc2011】 Xor的更多相关文章

  1. 【bzoj2115】【wc2011】Xor

    2115: [Wc2011] Xor Time Limit: 10 Sec  Memory Limit: 259 MBSubmit: 5380  Solved: 2249[Submit][Status ...

  2. bzoj2115【WC2011】XOR

    题意:http://www.lydsy.com/JudgeOnline/problem.php?id=2115 sol  :首先考虑处理出DFS树,那么树上的所有非树边可以构成一个简单环 因为所有不在 ...

  3. 【BZOJ2337】Xor和路径(高斯消元)

    [BZOJ2337]Xor和路径(高斯消元) 题面 BZOJ 题解 我应该多学点套路: 对于xor之类的位运算,要想到每一位拆开算贡献 所以,对于每一位拆开来看 好了,既然是按位来算 我们就只需要计算 ...

  4. 【BZOJ2115】Xor(线性基)

    [BZOJ2115]Xor(线性基) 题面 BZOJ Description Input 第一行包含两个整数N和 M, 表示该无向图中点的数目与边的数目. 接下来M 行描述 M 条边,每行三个整数Si ...

  5. BZOJ 1854 【Scoi2010】 游戏

    Description lxhgww最近迷上了一款游戏,在游戏里,他拥有很多的装备,每种装备都有2个属性,这些属性的值用[1,10000]之间的数表示.当他使用某种装备时,他只能使用该装备的某一个属性 ...

  6. BZOJ 1303 【CQOI2009】中位数图

    baidu了一下bzoj水题列表...找到这道题.   题目大意:给定一个数t,在给定的一段包含1-n的序列中找出多少个长度为奇数子序列的中位数为t. 第一眼没看数据范围,于是开心的打了一个O(n^3 ...

  7. 【HDU3949】XOR

    [题目大意] 给定一个数组,求这些数组通过异或能得到的数中的第k小是多少. 传送门:http://vjudge.net/problem/HDU-3949 [题解] 首先高斯消元求出线性基,然后将k按照 ...

  8. 【BZOJ-2115】Xor 线性基 + DFS

    2115: [Wc2011] Xor Time Limit: 10 Sec  Memory Limit: 259 MBSubmit: 2142  Solved: 893[Submit][Status] ...

  9. bzoj2115【WC2001】Xor

    2115: [Wc2011] Xor Time Limit: 10 Sec  Memory Limit: 259 MB Submit: 2059  Solved: 856 [Submit][Statu ...

随机推荐

  1. (Spring4 json入门)Spring4+SpringMVC+页面数据发送与接收(json格式)

    jar包(Maven仓库): Spring4 jar包(Maven仓库): 在测试过程中我查看了网上的一些教程,但是那些教程都是在Spring3环境下的,Spring3和Spring4解析json需要 ...

  2. python征程1.3(初识python)

    1.字典. 字典是python中的映射的数据类型,由键值对构成,几乎所有类型的python对象都可以用作键,不过一般还是以数字或是字符串最为常见.值可以是任意类型的python对象,字典元素用{}来包 ...

  3. 十一个行为模式之状态模式(State Pattern)

    定义: 当一个对象有多个状态,并且在每个状态下有不同的行为,可以使用状态模式来在其内部改变状态时改变其行为,而客户端不会察觉状态的改变,仍使用同样的方法或接口与对象进行交互. 结构图: Context ...

  4. 禁止root用户远程登录

    Linux修改ssh端口22 vi /etc/ssh/ssh_config vi /etc/ssh/sshd_config 然后修改为port 8888 以root身份service sshd res ...

  5. 让T4脱离VS生成代码

    让T4脱离VS生成代码 最近项目快结束:空闲时间相对多一点:为了以后工作方便点:索性研究了VS的T4: 写个代码生成器:以后可以通过代码生成器调用项目里面的Dll直接生成代码或者xml: 应用以下两个 ...

  6. 一些有用的SAP技术TCODE

    Background Processing RZ01 Job Scheduling Monitor SM36 Schedule Background Job SM36WIZ Job definitio ...

  7. gcc boost版本冲突解决日记

    问题背景 项目在Ubuntu10 64位 boost 1.55,boost采用的是项目内包含相对目录的形式部署 项目采用了 -Wall -Wextra -Werror -Wconversion 最高的 ...

  8. yum使用点滴

    yum下载依赖rpm包 先安装一个yum-downloadonly 1 yum install yum-downloadonly完成安装后,yum –help在最后就提示两个命令参数,分别是: Plu ...

  9. list集合的排序Comparator和Collections.sort

    一个例子 package sortt; import java.util.ArrayList; import java.util.Collections; import java.util.Compa ...

  10. Android M Permission 运行时权限 学习笔记

    Android M Permission 运行时权限 学习笔记 从Android 6.0开始, 用户需要在运行时请求权限, 本文对运行时权限的申请和处理进行介绍, 并讨论了使用运行时权限时新老版本的一 ...