[BZOJ 2115] Xor
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的更多相关文章
- bzoj 2115 Xor - 线性基 - 贪心
题目传送门 这是个通往vjudge的虫洞 这是个通往bzoj的虫洞 题目大意 问点$1$到点$n$的最大异或路径. 因为重复走一条边后,它的贡献会被消去.所以这条路径中有贡献的边可以看成是一条$1$到 ...
- ACM学习历程—BZOJ 2115 Xor(dfs && 独立回路 && xor高斯消元)
题目链接:http://www.lydsy.com/JudgeOnline/problem.php?id=2115 题目大意是求一条从1到n的路径,使得路径xor和最大. 可以发现想枚举1到n的所有路 ...
- BZOJ 2115 Xor(抑或值最大路径)
题目链接:http://61.187.179.132/JudgeOnline/problem.php?id=2115 题意:给出一个带权无向图.求一条1到n的路径使得路径上权值的抑或值最大? 思路:( ...
- BZOJ 2115 Xor(线性基)
题意:给定一个n<=50000个点m<=100000条边的无向联通图,每条边上有一个权值wi<=1e18.请你求一条从1到n的路径,使得路径上的边的异或和最大. 任意一条1到n的路径 ...
- -【线性基】【BZOJ 2460】【BZOJ 2115】【HDU 3949】
[把三道我做过的线性基题目放在一起总结一下,代码都挺简单,主要就是贪心思想和异或的高斯消元] [然后把网上的讲解归纳一下] 1.线性基: 若干数的线性基是一组数a1,a2,a3...an,其中ax的最 ...
- BZOJ 2337 XOR和路径 | 高斯消元 期望 位运算
BZOJ 2337 XOR和路径 题解 这道题和游走那道题很像,但又不是完全相同. 因为异或,所以我们考虑拆位,分别考虑每一位: 设x[u]是从点u出发.到达点n时这一位异或和是1的概率. 对于所有这 ...
- bzoj 2115: [Wc2011] Xor xor高斯消元
2115: [Wc2011] Xor Time Limit: 10 Sec Memory Limit: 259 MBSubmit: 797 Solved: 375[Submit][Status] ...
- BZOJ 2115: [Wc2011] Xor
2115: [Wc2011] Xor Time Limit: 10 Sec Memory Limit: 259 MB Submit: 2794 Solved: 1184 [Submit][Stat ...
- BZOJ 2115: [Wc2011] Xor DFS + 线性基
2115: [Wc2011] Xor Time Limit: 10 Sec Memory Limit: 259 MB Description Input 第一行包含两个整数N和 M, 表示该无向图中 ...
随机推荐
- 【BZOJ 2241 打地鼠】
Time Limit: 10 Sec Memory Limit: 512 MBSubmit: 1430 Solved: 908[Submit][Status][Discuss] Descripti ...
- BZOJ 3319 黑白树 并查集+线段树
这这这这这这什么毒瘤题!!!!!!!!!!!!!!!!!!!!!!!!!!!! 卡LCT(优秀的LCT由于是均摊本身就带着2,3的常数在,而且这道题对于LCT标记十分难维护,又得乘上4,5然后就炸了) ...
- [bzoj 2844]线性基+高斯消元
题目链接:http://www.lydsy.com/JudgeOnline/problem.php?id=2844 又用到线性基+高斯消元的套路题了,因为经过高斯消元以后的线性基有非常好的序关系,所以 ...
- ng websocket
ng使用websocket 1.安装依赖库npm install ws --save 2.安装类型定义文件 npm install @types/ws --save 3.编写服务 import { I ...
- Ubuntu14.04 换源 阿里云
sudo cp /etc/apt/sources.list /etc/apt/sources.list_backup sudo vim /etc/apt/sources.list sudo apt-g ...
- Centos系统修改hostname
1.用命令临时修改 hostname oier 这样,服务器的hostname就变成oier了,但是重启之后会变回去 2.编辑配置文件永久修改 vi /etc/sysconfig/network HO ...
- php设定错误和异常处理可使用的函数
1.register_shutdown_function 使用场景:当我们的脚本执行完成或意外死掉导致PHP执行即将关闭时,这个函数会被调用. 函数介绍: void register_shutdown ...
- linux知识复习1-dup dup2
#include <sys/stat.h> #include <string.h> #include <fcntl.h> #include <stdio.h& ...
- a标签里文本居中
text-align:center; height: 30px; line-height:30px;
- 用java实现word转html
由于项目需要,要完成将上传的word文件转成html文件的功能.在网上搜了一下,大致有3种方法:1.用jacob实现 2.用poi实现 3.用openoffice实现. 从网上来看好像jacob用的人 ...