正题

题目链接: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和路径【线性基】相关推荐

  1. P4151 [WC2011]最大XOR和路径(线性基)

    P4151 [WC2011]最大XOR和路径 对于求解最大异或和路径,首先边可以重复走,最终的结果一定是一条路径和许多环的异或和,因为路径和环之间的边会被走两次,不会被计算,所以我们可以通过dfs树求 ...

  2. P4151 [WC2011]最大XOR和路径(线性基应用)

    P4151 [WC2011]最大XOR和路径 思路 如果单纯的只是树形图,那么答案显然易见只有一种,也就是从头到尾的路径从头到尾的异或值,但是这里不同的就是有可能在道路上有许多的环. 题目有一个重点提 ...

  3. bzoj 2115: [Wc2011] Xor(DFS+线性基)

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

  4. 洛谷 P4151 BZOJ 2115 [WC2011]最大XOR和路径

    //bzoj上的题面太丑了,导致VJ的题面也很丑,于是这题用洛谷的题面 题面描述 XOR(异或)是一种二元逻辑运算,其运算结果当且仅当两个输入的布尔值不相等时才为真,否则为假. XOR 运算的真值表如 ...

  5. 牛客练习赛26 D xor序列 (线性基)

    链接:https://ac.nowcoder.com/acm/contest/180/D 来源:牛客网 xor序列 时间限制:C/C++ 1秒,其他语言2秒 空间限制:C/C++ 262144K,其他 ...

  6. 线性代数(矩阵、高斯、线性基……)

    矩阵 矩阵加法: 相同位置相加. 矩阵乘法: 满足分配率.结合律,不满足交换律(矩阵与逆矩阵之间除外) . 矩阵转置: 记矩阵为 \(A\) ,则 \(A\) 的转置记为 \(A^T\) . 性质: ...

  7. 高斯消元简单线性代数线性基学习记录

    线性代数,唉 高斯消元 P4035 [JSOI2008]球形空间产生器 题目描述 有一个球形空间产生器能够在n维空间中产生一个坚硬的球体.现在,你被困在了这个n维球体中,你只知道球面上n+1个点的坐标 ...

  8. 区间子集最大/最小异或和问题(线性基,树上差分)

    闲话 有这样一个问题--一个长度为\(n\)的序列\(a_1-a_n\),\(q\)个询问,每次询问\(l,r\),选出\(\{a_l,a_{l+1}...a_{r}\}\)中一个子集使得子集内元素异 ...

  9. 【BZOJ2115】[Wc2011] Xor 高斯消元求线性基+DFS

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

  10. BZOJ2115:[WC2011] Xor(线性基)

    Description Input 第一行包含两个整数N和 M, 表示该无向图中点的数目与边的数目. 接下来M 行描述 M 条边,每行三个整数Si,Ti ,Di,表示 Si 与Ti之间存在 一条权值为 ...

最新文章

  1. 如果你没用过maven的install,你应该了解一下!maven中的install功能及用法。
  2. android 屏幕录像
  3. matplot画图控制marker点的个数_S7-1200运动控制
  4. python基础知识面试题-Python 基础面试题总结
  5. 设计模式 之 适配器模式
  6. 如何直接强制客户端刷新.js文件
  7. 【面向对象设计的5个原则】
  8. 操作手册模板_挂蓝悬臂浇筑箱梁施工技术操作手册
  9. 深圳市居住证查询、办理政府网址
  10. 资源管理器关闭了怎么打开
  11. 计算机显示器分辨率,电脑分辨率多少合适,详细教您电脑显示器分辨率怎么调整...
  12. 如何修改植物大战僵尸金币
  13. 智能名片如何在会场营销落地
  14. python猴子吃桃问题_用Python解决猴子吃桃问题
  15. excel根据条件列转行_excel怎么批量把行变成列
  16. c语言面试题东软,【东软集团程序员Java东软集团C语言面试题】面试问题:东软java面… - 看准网...
  17. MainWindow.xaml.cs
  18. GDP、经济与社会数据下载网站整理
  19. dotnet 使用 Crossgen2 对 DLL 进行 ReadyToRun 提升启动性能
  20. bash 基础命令

热门文章

  1. 如何发送html email,如何发送HTML电子邮件?
  2. 实现图片打乱_疫情过后,是否打乱了你前进的脚步?面对现状,你将如何开展新的征程?...
  3. linux新建文件夹明率,linux新建文件和文件夹命令
  4. java spark读写hdfs_Spark读取HDFS数据输出到不同的文件
  5. 机器人J中WPR_优傲:协作机器人的未来在哪里?
  6. mysql打开无法控制_MySQL不能启动和停止 MySQL各种解决方法教程
  7. java原生的编译软件_Java 转原生平台代码 RoboVM
  8. java file rename 失败_java重命名文件造成文件不可读写
  9. python rsa加密二进制文件_用Python中的RSA加密文件
  10. [JavaWeb-MySQL]多表查询练习