BZOJ 2115 【Wc2011】 Xor
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的更多相关文章
- 【bzoj2115】【wc2011】Xor
2115: [Wc2011] Xor Time Limit: 10 Sec Memory Limit: 259 MBSubmit: 5380 Solved: 2249[Submit][Status ...
- bzoj2115【WC2011】XOR
题意:http://www.lydsy.com/JudgeOnline/problem.php?id=2115 sol :首先考虑处理出DFS树,那么树上的所有非树边可以构成一个简单环 因为所有不在 ...
- 【BZOJ2337】Xor和路径(高斯消元)
[BZOJ2337]Xor和路径(高斯消元) 题面 BZOJ 题解 我应该多学点套路: 对于xor之类的位运算,要想到每一位拆开算贡献 所以,对于每一位拆开来看 好了,既然是按位来算 我们就只需要计算 ...
- 【BZOJ2115】Xor(线性基)
[BZOJ2115]Xor(线性基) 题面 BZOJ Description Input 第一行包含两个整数N和 M, 表示该无向图中点的数目与边的数目. 接下来M 行描述 M 条边,每行三个整数Si ...
- BZOJ 1854 【Scoi2010】 游戏
Description lxhgww最近迷上了一款游戏,在游戏里,他拥有很多的装备,每种装备都有2个属性,这些属性的值用[1,10000]之间的数表示.当他使用某种装备时,他只能使用该装备的某一个属性 ...
- BZOJ 1303 【CQOI2009】中位数图
baidu了一下bzoj水题列表...找到这道题. 题目大意:给定一个数t,在给定的一段包含1-n的序列中找出多少个长度为奇数子序列的中位数为t. 第一眼没看数据范围,于是开心的打了一个O(n^3 ...
- 【HDU3949】XOR
[题目大意] 给定一个数组,求这些数组通过异或能得到的数中的第k小是多少. 传送门:http://vjudge.net/problem/HDU-3949 [题解] 首先高斯消元求出线性基,然后将k按照 ...
- 【BZOJ-2115】Xor 线性基 + DFS
2115: [Wc2011] Xor Time Limit: 10 Sec Memory Limit: 259 MBSubmit: 2142 Solved: 893[Submit][Status] ...
- bzoj2115【WC2001】Xor
2115: [Wc2011] Xor Time Limit: 10 Sec Memory Limit: 259 MB Submit: 2059 Solved: 856 [Submit][Statu ...
随机推荐
- PHP 小数点保留两位
最近在做统计这一块内容,接触关于数字的数据比较多, 用到了三个函数来是 数字保留小数后 N 位: 接下来简单的介绍一下三个函数: 1.number_format echo number_format( ...
- PHP 字符串左边补0,字符串右边补0
概述:项目中经常会使用到在一串编码左边.右边甚至中间自动填充制定字符如"0" 并且制定填充后的字符串长度. 函数str_pad:该函数返回 input 被从左端.右端或者同时两端被 ...
- java web学习总结(十) -------------------HttpServletRequest对象
一.HttpServletRequest介绍 HttpServletRequest对象代表客户端的请求,当客户端通过HTTP协议访问服务器时,HTTP请求头中的所有信息都封装在这个对象中,通过这个对象 ...
- Android的Message Pool是什么——源码角度分析
原文地址: http://blog.csdn.net/xplee0576/article/details/46875555 Android中,我们在线程之间通信传递通常采用Android的消息机制,而 ...
- iOS HTML 字符串中的图片 自适应大小
本文原文地址:http://www.cnblogs.com/qianLL/p/6095988.html 有时候 我们接收数据的时候 后台给的数据室一串HTML 的字符串 但是 我们要显示出来 这 ...
- 了解HTML CSS布局(层叠样式表)
CSS全称为"层叠样式表(Cascading Style Sheets)", 它主要是用于定义HTML内容在浏览器内显示的样式, 比如文字, 颜色, 视觉上的静态效果, 布局等等. ...
- 【Swift 2.1】为 UIView 添加点击事件和点击效果
前言 UIView 不像 UIButton 加了点击事件就会有点击效果,体验要差不少,这里分别通过自定义和扩展来实现类似 UIButton 的效果. 声明 欢迎转载,但请保留文章原始出处:) 博客园: ...
- 安装免费的正版Windows10操作系统 - 初学者系列 - 学习者系列文章
Windows 10操作系统是目前Windows平台最新的操作系统,其相对于其它旧版的操作系统是一个比较成功的操作系统.微软直接使用10版本号,跳过了9版本号进行发布这款操作系统,说明windows ...
- [转]PaaS平台分类
本文转自阿朱说 大家发现没,自从我们上升到有规模的互联网架构后,咱们中国的技能能力就跟不上了,只能采取国际业界顶级大公司开源出来的而且已经经受住大规模实际应用考验的组件来搭架构,因而咱们近几年大规模网 ...
- 探索RegisterAllAreas
在MVC中注册Area时,我们一般会在相应的区域下定义一个继承与AreaRegistration的类,代码如下: public class AdminAreaRegistration : AreaRe ...