P4151-[WC2011]最大XOR和路径【线性基】
正题
题目链接:https://www.luogu.com.cn/problem/P4151
题目大意
给一个无向图,求一条1∼n1\sim n1∼n的路径使得异或和最大。
解题思路
很强的思路啊(好像去年YPXYPXYPX大爷就讲了反正我也没听懂)
我们可以将路径拆分成三部分:环,连接环的路径,连接111和nnn的路径。其中连接环的路径因为会走两次所以就不用处理。
那我们发现如果111点能到的环可以任意我们选择异或或者不异或,也就是对于每个环我们可以丢入线性基中处理。
考虑111到nnn的路径如何选择,我们发现对于两条111到nnn的路径会构成一个环,也就是如果我们选择了不优的那一条,那么只要异或上这个大环就可以了。所以我们随便选择一条111到nnn的路径即可。
codecodecode
#include<cstdio>
#include<cstring>
#include<algorithm>
#define ll long long
using namespace std;
const ll N=5e4+10;
struct node{ll to,next,w;
}a[N*4];
ll n,m,tot,d[80],v[N],w[N],ls[N];
void add(ll x){for(ll i=60;i>=0;i--)if((x>>i)&1){if(d[i])x^=d[i];else{d[i]=x;break;}}return;
}
void addl(ll x,ll y,ll w){a[++tot].to=y;a[tot].next=ls[x];ls[x]=tot;a[tot].w=w;return;
}
void dfs(ll x,ll dis){v[x]=1;w[x]=dis;for(ll i=ls[x];i;i=a[i].next){ll y=a[i].to;if(v[y])add(dis^a[i].w^w[y]);else dfs(y,dis^a[i].w);}//v[x]=0;return;
}
ll solve(ll ans){for(ll i=60;i>=0;i--)if((ans^d[i])>ans)ans^=d[i];return ans;
}
int main()
{scanf("%lld%lld",&n,&m);for(ll i=1;i<=m;i++){ll x,y,w;scanf("%lld%lld%lld",&x,&y,&w);addl(x,y,w);addl(y,x,w);}dfs(1,0);printf("%lld",solve(w[n]));
}
P4151-[WC2011]最大XOR和路径【线性基】相关推荐
- P4151 [WC2011]最大XOR和路径(线性基)
P4151 [WC2011]最大XOR和路径 对于求解最大异或和路径,首先边可以重复走,最终的结果一定是一条路径和许多环的异或和,因为路径和环之间的边会被走两次,不会被计算,所以我们可以通过dfs树求 ...
- P4151 [WC2011]最大XOR和路径(线性基应用)
P4151 [WC2011]最大XOR和路径 思路 如果单纯的只是树形图,那么答案显然易见只有一种,也就是从头到尾的路径从头到尾的异或值,但是这里不同的就是有可能在道路上有许多的环. 题目有一个重点提 ...
- bzoj 2115: [Wc2011] Xor(DFS+线性基)
2115: [Wc2011] Xor Time Limit: 10 Sec Memory Limit: 259 MB Submit: 3853 Solved: 1609 [Submit][Stat ...
- 洛谷 P4151 BZOJ 2115 [WC2011]最大XOR和路径
//bzoj上的题面太丑了,导致VJ的题面也很丑,于是这题用洛谷的题面 题面描述 XOR(异或)是一种二元逻辑运算,其运算结果当且仅当两个输入的布尔值不相等时才为真,否则为假. XOR 运算的真值表如 ...
- 牛客练习赛26 D xor序列 (线性基)
链接:https://ac.nowcoder.com/acm/contest/180/D 来源:牛客网 xor序列 时间限制:C/C++ 1秒,其他语言2秒 空间限制:C/C++ 262144K,其他 ...
- 线性代数(矩阵、高斯、线性基……)
矩阵 矩阵加法: 相同位置相加. 矩阵乘法: 满足分配率.结合律,不满足交换律(矩阵与逆矩阵之间除外) . 矩阵转置: 记矩阵为 \(A\) ,则 \(A\) 的转置记为 \(A^T\) . 性质: ...
- 高斯消元简单线性代数线性基学习记录
线性代数,唉 高斯消元 P4035 [JSOI2008]球形空间产生器 题目描述 有一个球形空间产生器能够在n维空间中产生一个坚硬的球体.现在,你被困在了这个n维球体中,你只知道球面上n+1个点的坐标 ...
- 区间子集最大/最小异或和问题(线性基,树上差分)
闲话 有这样一个问题--一个长度为\(n\)的序列\(a_1-a_n\),\(q\)个询问,每次询问\(l,r\),选出\(\{a_l,a_{l+1}...a_{r}\}\)中一个子集使得子集内元素异 ...
- 【BZOJ2115】[Wc2011] Xor 高斯消元求线性基+DFS
[BZOJ2115][Wc2011] Xor Description Input 第一行包含两个整数N和 M, 表示该无向图中点的数目与边的数目. 接下来M 行描述 M 条边,每行三个整数Si,Ti ...
- BZOJ2115:[WC2011] Xor(线性基)
Description Input 第一行包含两个整数N和 M, 表示该无向图中点的数目与边的数目. 接下来M 行描述 M 条边,每行三个整数Si,Ti ,Di,表示 Si 与Ti之间存在 一条权值为 ...
最新文章
- 如果你没用过maven的install,你应该了解一下!maven中的install功能及用法。
- android 屏幕录像
- matplot画图控制marker点的个数_S7-1200运动控制
- python基础知识面试题-Python 基础面试题总结
- 设计模式 之 适配器模式
- 如何直接强制客户端刷新.js文件
- 【面向对象设计的5个原则】
- 操作手册模板_挂蓝悬臂浇筑箱梁施工技术操作手册
- 深圳市居住证查询、办理政府网址
- 资源管理器关闭了怎么打开
- 计算机显示器分辨率,电脑分辨率多少合适,详细教您电脑显示器分辨率怎么调整...
- 如何修改植物大战僵尸金币
- 智能名片如何在会场营销落地
- python猴子吃桃问题_用Python解决猴子吃桃问题
- excel根据条件列转行_excel怎么批量把行变成列
- c语言面试题东软,【东软集团程序员Java东软集团C语言面试题】面试问题:东软java面… - 看准网...
- MainWindow.xaml.cs
- GDP、经济与社会数据下载网站整理
- dotnet 使用 Crossgen2 对 DLL 进行 ReadyToRun 提升启动性能
- bash 基础命令
热门文章
- 如何发送html email,如何发送HTML电子邮件?
- 实现图片打乱_疫情过后,是否打乱了你前进的脚步?面对现状,你将如何开展新的征程?...
- linux新建文件夹明率,linux新建文件和文件夹命令
- java spark读写hdfs_Spark读取HDFS数据输出到不同的文件
- 机器人J中WPR_优傲:协作机器人的未来在哪里?
- mysql打开无法控制_MySQL不能启动和停止 MySQL各种解决方法教程
- java原生的编译软件_Java 转原生平台代码 RoboVM
- java file rename 失败_java重命名文件造成文件不可读写
- python rsa加密二进制文件_用Python中的RSA加密文件
- [JavaWeb-MySQL]多表查询练习