bzoj 2115 Xor - 线性基 - 贪心】的更多相关文章

题目传送门 这是个通往vjudge的虫洞 这是个通往bzoj的虫洞 题目大意 问点$1$到点$n$的最大异或路径. 因为重复走一条边后,它的贡献会被消去.所以这条路径中有贡献的边可以看成是一条$1$到$n$的简单路径加上若干个环. 因此可以找任意一条路径,然后找出所有环扔进线性基跑出最大异或和. 但是找出所有环可能会T掉,但是仔细画图发现,并不需要找出所有环,例如: 在上图中,你并不需找出所有的环,只用找出1 - 3 - 4 - 2和3 - 5 - 6 - 4这两个环,它们异或后就能得到环1 -…
题意:给定一个n<=50000个点m<=100000条边的无向联通图,每条边上有一个权值wi<=1e18.请你求一条从1到n的路径,使得路径上的边的异或和最大. 任意一条1到n的路径的异或和,都可以由任意一条1到n路径的异或和与图中的一些环的异或和来组合得到. 为什么?假如我们已经有一条1到n的路径,考虑在出发之前,先走到图中任意一个环上面,走一遍这个环,然后原路返回,这样我们既得到了这个环的异或值(走到环的路径被走过了 2 次,抵消了),也返回了点1.我们可以对任意的环这样做,从而获得…
Description 给定N个数,你可以在这些数中任意选一些数出来,每个数可以选任意多次,试求出你能选出的数的异或和的最大值和严格次大值. Input 第一行一个正整数N. 接下来一行N个非负整数. Output 一行,包含两个数,最大值和次大值. 最大值好办,次大值只需依次枚举线性基里的每一个元素,然后看异或哪个会变小就行. #include <bits/stdc++.h> #define ll long long #define M 33 #define setIO(s) freopen…
题目链接: 洛谷 BZOJ 题意 给定 \(n\) 个矿石,每个矿石有编号和魔力值两种属性,选择一些矿石,使得魔力值最大且编号的异或和不为 0. 思路 线性基 贪心 根据矿石的魔力值从大到小排序. 线性基的所有异或和都不为零.因此维护一个线性基,每次插入编号 \(i\),如果 \(i\) 与之前的线性基都线性无关,也就是能插入,就插入并将魔力值累加到 \(ans\). #include <bits/stdc++.h> using namespace std; typedef long long…
Link:https://www.lydsy.com/JudgeOnline/problem.php?id=2115 Algorithm: 此题一看到是求异或和最大问题的,立即想到使用线性基解题 最终结果发现是由任意一条1~N的路径和若干个环构成的 证明: 1.如果答案中有环不在任意选取的路径上,可以先走到环再走回来 由于异或的自反性,相当于只增加了环的异或和 2.如果答案中的1~N的路径不是这条,那么这条路径一定和当前任意选取的路径形成一个环 那么我们只要再增加这个环上的异或和,就相当于“更改…
[题目分析] 显然,一个路径走过两边是不需要计算的,所以我么找到一条1-n的路径,然后向该异或值不断异或简单环即可. 但是找出所有简单环是相当复杂的,我们只需要dfs一遍,找出所有的环路即可,因为所有的简单环都可以经过各种各样的异或得到. 然后线性基,在从高位向低位贪心即可,至于证明,需要拟阵的相关知识. [代码] #include <cstdio> #include <cstring> #include <cstdlib> #include <cmath>…
题目链接 \(Description\) 给定一张无向带边权图(存在自环和重边).求一条1->n的路径,使得路径经过边的权值的Xor和最大.可重复经过点/边,且边权和计算多次. \(Solution\) 来找一些性质.从一个点出发,到达任意一个点后原路返回,那么得到的和仍为0.但是如果走完一个环后原路返回,则会得到这个环的Xor和. 那么从1点就可以得到任何一个环的Xor和.我们还需要一条1->n的路径,使得搭配上某些环后答案最大.于是我们就可以对环的权值构造线性基,拿路径Xor和在上面求最大…
https://www.lydsy.com/JudgeOnline/problem.php?id=2115 每一条从1到n的道路都可以表示为一条从1到n的道路异或若干个环的异或值. 那么把全部的环丢到线性基里基本操作就可以了.. https://blog.csdn.net/qaq__qaq/article/details/53812883 这个博客非常好 #include<iostream> #include<cstdio> #include<algorithm> #i…
题目链接 线性基:https://blog.csdn.net/qq_36056315/article/details/79819714. \(Description\) 求一组矿石,满足其下标异或和不为0,且价值和最大. \(Solution\) 按价值从大到小依次插入线性基,这样最后得到的集合就是价值和最大的了. 贪心策略简单证明(参考:https://www.cnblogs.com/acmsong/p/7508022.html): 假设当前选取的集合\(S\)价值为\(\{v1,v2,...…
以后我也要用传送门! 题意:一些数,选择一个权值最大的异或和不为0的集合 终于有点明白线性基是什么了...等会再整理 求一个权值最大的线性无关子集 线性无关子集满足拟阵的性质,贪心选择权值最大的,用高斯消元判断是否和已选择的线性相关 每一位记录pivot[i]为i用到的行 枚举要加入的数字的每一个二进制为1的位,如果有pivot[i]那么就异或一下(消元),否则pivot[i]=这个数并退出 如果最后异或成0了就说明线性相关... #include <iostream> #include &l…