[WC2011]最大XOR和路径(线性基)】的更多相关文章

[WC2011]最大XOR和路径 LG传送门 需要充分发掘经过路径的性质:首先注意不一定是简单路径,但由于统计的是异或值,重复走是不会被统计到的,考虑对于任意一条从\(1\)到\(n\)的路径的有效部分是什么.最简单的情况就是走一条链,有时候我们会从这条链走出去,走一段路径之后走一个环,再沿这条路径回到原来的链上,这样一来答案就变成了原来的链异或找到的环.我们发现任意的环都可以用来更新答案,那么我们找到原图中所有的环丢进线性基里,再把所有一条\(1\)到\(n\)的链在线性基里查询最大异或和就行…
题目传送门 最大XOR和路径 格式难调,题面就不放了. 分析: 一道需要深刻理解线性基的题目. 好久没打过线性基的题了,一开始看到这题还是有点蒙逼的,想了几种方法全被否定了.还是看了大佬的题解才会做的. 首先我们能想到,在图中从$1$走到$n$有这么两种情况,一种是一条链直接走到$n$,另一种是先走链然后绕若干个环然后回到链上走到$n$.对于这道题显然我们是要考虑所有的环的(由异或的性质可知). 然后我们又可以发现,如果一条链和一个环中间有一条路径相连,那么我们从链上走到环上时会经过这条路径一次…
传送门 输入输出样例 输入样例#1: 5 7 1 2 2 1 3 2 2 4 1 2 5 1 4 5 3 5 3 4 4 3 2 输出样例#1: 6 说明 [样例说明] 根据异或的性质,将一个数异或两次便会消除影响 那么预处理所有环插入线性基中,之后随便(因为能够消除影响)找一条简单路径查询最大值即可 code: //By Menteur_Hxy #include<cstdio> #include<iostream> #include<cstring> #include…
题目传送门 题意:给出一幅无向图,求1到n的所有路径中最大异或和,一条边可以被重复经过. 思路: 参考了大佬的博客 #pragma GCC optimize (2) #pragma G++ optimize (2) #pragma comment(linker, "/STACK:102400000,102400000") #include<bits/stdc++.h> #include<cstdio> #include<vector> #define…
题解见:https://www.luogu.org/problemnew/solution/P4151 其实就是找出所有环 把环上所有边异或起来得到的值扔到线性基里面 然后随便走一条从1~n的链 最后求最大异或和即可 #include <iostream> #include <cstdio> #include <cstring> #include <algorithm> using namespace std; #define LL long long LL…
P4151 [WC2011]最大XOR和路径 题目描述 XOR(异或)是一种二元逻辑运算,其运算结果当且仅当两个输入的布尔值不相等时才为真,否则为假. XOR 运算的真值表如下( 1 表示真, 0 表示假): 而两个非负整数的 XOR 是指将它们表示成二进制数,再在对应的二进制位进行 XOR 运算. 譬如 12 XOR 9 的计算过程如下: 故 12 XOR 9 = 5 . 容易验证, XOR 运算满足交换律与结合律,故计算若干个数的 XOR 时,不同的计算顺序不会对运算结果造成影响.从而,可以…
P4151 [WC2011]最大XOR和路径 题意 求无向带权图的最大异或路径 范围 思路还是很厉害的,上午想了好一会儿都不知道怎么做 先随便求出一颗生成树,然后每条返祖边都可以出现一个环,从的路径上走到环绕一圈再走回来去和回来的路径抵消,于是对每个环加入线性基,询问一下路径在上面的最大值就行了 Code: #include <cstdio> #define ll long long const int N=5e4+10; const int M=2e5+10; int head[N],to[…
[WC2011]最大XOR和路径 给一个 \(n\) 个点 \(m\) 条边(权值为 \(d_i\))的无向有权图,可能有重边和子环.可以多次经过一条边,求 \(1\to n\) 的路径的最大边权异或和. 数据范围:\(1\le n\le 5\cdot 10^4\),\(1\le m\le 10^5,0\le d_i\le 10^{18}\). 非常神的一题,令小蒟蒻大开眼界. 一句话题解:通过 \(\texttt{Dfs}\) 得到到每个点的一种路径答案,用线性基找到最优替换方案. 先看这个奇…
P4151 [WC2011]最大XOR和路径 一道妙极了的题. 首先直接从1走到n 然后现在图上有很多环 所以可以在走到n之后走到环上一个点,再走一遍环,再原路返回.这样就会xor上环的权值. 然后只需要把环搜出来就星了. // It is made by XZZ #include<cstdio> #include<algorithm> #define il inline #define rg register #define vd void #define sta static…
题目大意:给一张无向图,求一条1-n的路径,是路径边权的异或和最小. 题解 这道题的思路很妙,首先我们可以随便找出一条从1到n的路径来,然后我们可以选一些环. 其实不管这个环和这条路径有怎样的关系,我们都是可以直接选的. 比如说选了一个和这个路径没有交的环,等价于从1走到了这个环然后走了一圈又走回到了1,一条边被异或两次相当于吗,没走. 对于和路径有交的环,异或上它相当于把有交的部分异或两次,相当于走了这个环,也是合法的. 然后我们把所有环插入线性基中,预处理可以用dfs实现. 代码 #incl…