Link:https://www.lydsy.com/JudgeOnline/problem.php?id=2115

Algorithm:

此题一看到是求异或和最大问题的,立即想到使用线性基解题

最终结果发现是由任意一条1~N的路径和若干个环构成的

证明:

1、如果答案中有环不在任意选取的路径上,可以先走到环再走回来

由于异或的自反性,相当于只增加了环的异或和

2、如果答案中的1~N的路径不是这条,那么这条路径一定和当前任意选取的路径形成一个环

那么我们只要再增加这个环上的异或和,就相当于“更改路径”

那么接下来,我们只要dfs找到所有的环并记录其异或和

选取任意一条1~N的路径作为初始值,和所有环形成的线性基贪心加合即可

Code:

#include <bits/stdc++.h>

using namespace std;
typedef long long ll;
typedef pair<ll,ll> P; inline ll read() //IO优化中的int要改为LL!!!
{
char ch;ll num,f=;
while(!isdigit(ch=getchar())) f|=(ch=='-');
num=ch-'';
while(isdigit(ch=getchar())) num=num*+ch-'';
return f?-num:num;
} #define F first
#define S second const int MAXN=5e4+;
const int MAXM=2e5+;
vector<P> G[MAXN];
int n,m;
bool vis[MAXN];
ll dist[MAXN],base[],cir[MAXM],res,cnt=; void dfs(int x)
{
vis[x]=true;
for(int i=;i<G[x].size();i++) //寻找返祖边
{
P v=G[x][i];
if(!vis[v.F]) dist[v.F]=dist[x]^v.S,dfs(v.F);
else cir[++cnt]=dist[x]^dist[v.F]^v.S;
}
} int main()
{
n=read();m=read();
for(int i=;i<=m;i++)
{
ll x=read(),y=read(),z=read();
G[x].push_back(P(y,z));
G[y].push_back(P(x,z));
}
dfs();res=dist[n]; for(int i=;i<=cnt;i++) //构建线性基
for(int j=;j>=;j--)
{
if(!(cir[i]>>j)) continue;
if(!base[j]){base[j]=cir[i];break;}
cir[i]^=base[j];
} for(int i=;i>=;i--) res=max(res,res^base[i]);
cout << res;
return ;
}

Review:

1、异或和MAX  <----->   线性基

2、解决有环问题时,不一定要找到所有的环

大多时候,只要找到dfs返祖边形成的环即可

此题是因为一个含有多条返祖边形成的环的异或和就等于几个“小环”的异或总和

3、充分利用异或的自反性

求解异或和问题中,环+异或可以实现“换路”、“远程加环”等操作

4、如果res的初始值不为0,在和线性基添加时不可以看到1就添加,MAX更稳妥

[BZOJ 2115] Xor的更多相关文章

  1. bzoj 2115 Xor - 线性基 - 贪心

    题目传送门 这是个通往vjudge的虫洞 这是个通往bzoj的虫洞 题目大意 问点$1$到点$n$的最大异或路径. 因为重复走一条边后,它的贡献会被消去.所以这条路径中有贡献的边可以看成是一条$1$到 ...

  2. ACM学习历程—BZOJ 2115 Xor(dfs && 独立回路 && xor高斯消元)

    题目链接:http://www.lydsy.com/JudgeOnline/problem.php?id=2115 题目大意是求一条从1到n的路径,使得路径xor和最大. 可以发现想枚举1到n的所有路 ...

  3. BZOJ 2115 Xor(抑或值最大路径)

    题目链接:http://61.187.179.132/JudgeOnline/problem.php?id=2115 题意:给出一个带权无向图.求一条1到n的路径使得路径上权值的抑或值最大? 思路:( ...

  4. BZOJ 2115 Xor(线性基)

    题意:给定一个n<=50000个点m<=100000条边的无向联通图,每条边上有一个权值wi<=1e18.请你求一条从1到n的路径,使得路径上的边的异或和最大. 任意一条1到n的路径 ...

  5. -【线性基】【BZOJ 2460】【BZOJ 2115】【HDU 3949】

    [把三道我做过的线性基题目放在一起总结一下,代码都挺简单,主要就是贪心思想和异或的高斯消元] [然后把网上的讲解归纳一下] 1.线性基: 若干数的线性基是一组数a1,a2,a3...an,其中ax的最 ...

  6. BZOJ 2337 XOR和路径 | 高斯消元 期望 位运算

    BZOJ 2337 XOR和路径 题解 这道题和游走那道题很像,但又不是完全相同. 因为异或,所以我们考虑拆位,分别考虑每一位: 设x[u]是从点u出发.到达点n时这一位异或和是1的概率. 对于所有这 ...

  7. bzoj 2115: [Wc2011] Xor xor高斯消元

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

  8. BZOJ 2115: [Wc2011] Xor

    2115: [Wc2011] Xor Time Limit: 10 Sec  Memory Limit: 259 MB Submit: 2794  Solved: 1184 [Submit][Stat ...

  9. BZOJ 2115: [Wc2011] Xor DFS + 线性基

    2115: [Wc2011] Xor Time Limit: 10 Sec  Memory Limit: 259 MB Description Input 第一行包含两个整数N和 M, 表示该无向图中 ...

随机推荐

  1. [NOIP2016]换教室 期望dp

    先弗洛伊德,然后把状态拆分遗传 #include<iostream> #include<cstdio> #include<cstring> #include< ...

  2. HDU 多校对抗赛 A Maximum Multiple

    Maximum Multiple Time Limit: 4000/2000 MS (Java/Others)    Memory Limit: 32768/32768 K (Java/Others) ...

  3. json解析之jackson

    对于json格式的数据解析现在越来越多了,之前介绍了两种:fastjson和net.sf.json解析. 今天又有一个jackson解析.不过相对于之前两种,这种感觉稍微笨拙些.呵呵,还是了解下吧: ...

  4. COGS2642 / Bzoj4590 [Shoi2015]自动刷题机

    Time Limit: 10 Sec  Memory Limit: 256 MBSubmit: 906  Solved: 321 Description 曾经发明了信号增幅仪的发明家SHTSC又公开了 ...

  5. bzoj1499: [NOI2005]瑰丽华尔兹&&codevs1748 单调队列优化dp

    这道题 网上题解还是很多很好的 强烈推荐黄学长 码风真的好看 神犇传送门 学习学习 算是道单调队列优化dp的裸题吧 #include<cstdio> #include<cstring ...

  6. Linux 下面adb命令的使用

    平板或者android手机使用adb是非常方便的.接下来我就介绍下adb使用以及一些常用的命令. 1,连接 用adb连接线,一端接PC的USB中,一端接平板或手机的adb口,当然得确保线没有问题,而且 ...

  7. 转:selenium webdriver+python基本操作

    转自: http://blog.163.com/ly676830315@126/blog/static/1017337222013102310617946/ 导入模块: from selenium i ...

  8. linux驱动基础系列--linux spi驱动框架分析

    前言 主要是想对Linux 下spi驱动框架有一个整体的把控,因此会忽略某些细节,同时里面涉及到的一些驱动基础,比如平台驱动.设备模型等也不进行详细说明原理.如果有任何错误地方,请指出,谢谢! spi ...

  9. kernelchina.org内核研究

    kernelchina.org 内核研究 转自:http://www.kernelchina.org

  10. H5智能表单

    表单 keygen元素的作用是提供一种验证用户的可靠方法 datalist 元素规定输入域的选项列表 output元素用于不同类型的输出,比如计算或脚本输出 智能表单 input 新增type值 em ...