洛谷 [P4151] 最大异或和路径
线性基
首先我们发现,对于一条路径走过去再走回来是没有意义的,
所以我们可以没有任何其他影响的取得一个环的异或和
所以我们预处理出来所有环的异或和,求出他们的线性基,然后任找一条 \(1 \sim n\) 的路径,找出异或和的最大值
#include <iostream>
#include <cstdio>
#include <algorithm>
#include <cstring>
#include <cmath>
#define ll long long
#define MB 62
using namespace std;
const int MAXN = 400005;
struct edge{
int to, nxt;
ll dis;
}e[MAXN<<1];
int head[MAXN], nume, n, m, tot;
ll a[MAXN], lb[MAXN], d[MAXN];
bool f[MAXN];
void adde(int from, int to, ll dis) {
e[++nume].to = to;
e[nume].dis = dis;
e[nume].nxt = head[from];
head[from] = nume;
}
ll init() {
ll rv = 0, fh = 1;
char c = getchar();
while(c < '0' || c > '9') {
if(c == '-') fh = -1;
c = getchar();
}
while(c >= '0' && c <= '9') {
rv = (rv<<1) + (rv<<3) + c - '0';
c = getchar();
}
return fh * rv;
}
void dfs(int u, int fa) {
f[u] = 1;
for(int i = head[u]; i; i = e[i].nxt) {
int v = e[i].to;
if(v != fa &&!f[v]) {
d[v] = d[u] ^ e[i].dis;
dfs(v, u);
}else if(v != fa) {
a[++tot] = d[u] ^ d[v] ^ e[i].dis;
}
}
}
void prepare(){
for(int i = 1; i <= tot; i++) {
for(int j = MB; j >= 0; j--) {
if(a[i] & (1ll << j)) {
if(!lb[j]){
lb[j] = a[i];
for(int k = j - 1; k >= 0; k--) if(lb[k] && (lb[j] & (1ll << k))) lb[j] ^= lb[k];
for(int k = j + 1; k <= MB; k++) if(lb[k] & (1ll << j)) lb[k] ^= lb[j];
break;
}else a[i] ^= lb[j];
}
}
}
}
int main() {
n = init(); m = init();
for(int i = 1; i <= m; i++) {
int u = init(), v = init();
ll dis = init();
adde(u, v, dis); adde(v, u, dis);
}
dfs(1, 0);
prepare();
ll ans = d[n];
for(int i = MB; i >= 0; i--) {
if((ans ^ lb[i]) > ans) ans ^= lb[i];
}
cout<<ans<<endl;
return 0;
}
洛谷 [P4151] 最大异或和路径的更多相关文章
- 洛谷 P4151 [WC2011]最大XOR和路径 解题报告
P4151 [WC2011]最大XOR和路径 题意 求无向带权图的最大异或路径 范围 思路还是很厉害的,上午想了好一会儿都不知道怎么做 先随便求出一颗生成树,然后每条返祖边都可以出现一个环,从的路径上 ...
- 洛谷P4151 [WC2011] 最大XOR和路径 [线性基,DFS]
题目传送门 最大XOR和路径 格式难调,题面就不放了. 分析: 一道需要深刻理解线性基的题目. 好久没打过线性基的题了,一开始看到这题还是有点蒙逼的,想了几种方法全被否定了.还是看了大佬的题解才会做的 ...
- [洛谷P4151][WC2011]最大XOR和路径
题目大意:给你一张$n$个点$m$条边的无向图,求一条$1->n$的路径,使得经过路径值的异或值最大(重复经过重复计算) 题解:某条路$k$被重复走了两次,那么它的权值对答案的贡献就是$0$,但 ...
- 洛谷P4151 [WC2011]最大XOR和路径(线性基)
传送门 不知道线性基是什么东西的可以看看蒟蒻的总结 首先看到异或就想到线性基 我们考虑有一条路径,那么从这条路径走到图中的任意一个环再走回这条路径上,对答案的贡献是这个环的异或和,走到这个环上的路径对 ...
- 洛谷 P4151 BZOJ 2115 [WC2011]最大XOR和路径
//bzoj上的题面太丑了,导致VJ的题面也很丑,于是这题用洛谷的题面 题面描述 XOR(异或)是一种二元逻辑运算,其运算结果当且仅当两个输入的布尔值不相等时才为真,否则为假. XOR 运算的真值表如 ...
- 洛谷 P3359 改造异或树
题目描述 给定一棵n 个点的树,每条边上都有一个权值.现在按顺序删掉所有的n-1条边,每删掉一条边询问当前有多少条路径满足路径上所有边权值异或和为0. 输入输出格式 输入格式: 第一行一个整数n. 接 ...
- Bzoj3261/洛谷P4735 最大异或和(可持久化Trie)
题面 Bzoj 洛谷 题解 显然,如果让你查询整个数列的最大异或和,建一颗\(01Trie\),每给定一个\(p\),按照二进制后反方向跳就行了(比如当前二进制位为\(1\),则往\(0\)跳,反之亦 ...
- 【洛谷】P1052 过河【DP+路径压缩】
P1052 过河 题目描述 在河上有一座独木桥,一只青蛙想沿着独木桥从河的一侧跳到另一侧.在桥上有一些石子,青蛙很讨厌踩在这些石子上.由于桥的长度和青蛙一次跳过的距离都是正整数,我们可以把独木桥上青蛙 ...
- 洛谷P4151 最大XOR和路径 [WC2011] 线性基+图论
正解:线性基+图论 解题报告: 传送门 首先可以思考一下有意义的路径会是什么样子,,,那就一定是一条链+一些环 挺显然的因为一条路径原路返回有没有意义辣?所以一定是走一条链+一些环(当然也可以麻油环, ...
随机推荐
- Python学习日志9月17日 一周总结
周一,9月11日 这天写的是过去一周的周总结,我从中找出当天的内容. 这天早晨给电脑折腾装机,早晨基本上没有学习,休息了一个早晨. 下午写的上周总结,完事做mooc爬虫课的作业,<Think P ...
- JAVA 数据库编程中的性能优化
1. 禁止自动提交:在默认情况下,程序执行的任何sql 语句都是自动提交的向一个表中插入2000条记录,自动提交所用的时间 11666毫秒禁止自动提交(显示提交) 3450毫秒 2. 批处理:多用批 ...
- WPF中实现两个窗口之间传值
在使用WPF的时候,我们经常会用到窗体之间传值,下面示例主窗口传值到子窗口,子窗口传值到主窗口的方法. 一.主窗口向子窗口传值 主窗口向子窗口传值主要方法就是在子窗口建立一个接收主窗口值的变量,然后实 ...
- OpenCascade:屏闪问题。
1.在OnDraw中同时调用用V3d_View::Redaw()和 V3d_View::FitAll();可暂时解决. 2.在OnDraw中同时调用用V3d_View::Update();
- Python 解压序列、可迭代对象并赋值给多个变量
Python数据结构和类型 1.1 解压序列赋值给多个变量 现在有一个包含N个元素的元组或者是序列,怎样将它里面的值解压后同时赋值给N个变量? 解决思路:先通过简单的解压赋值给多个变量,前提是变量的数 ...
- 如何关闭OSX 10.11 SIP (System Integrity Protection)
http://www.jianshu.com/p/0572336a0771 注意:SIP功能是Apple在OSX上推出的系统完整性保护功能,对于普通MAC用户来说是一项安全保护功能,如果不了解他的作用 ...
- shell脚本,判断给出的字符串是否相等。
第一种方法[root@localhost wyb]# .sh #!/bin/bash #判断给出的字符串是否相等 read -p "Please Input a number:" ...
- Xcode 6 创建 Empty Application
1.创建一个 Single View Application: 2.删除工程目录下的 Main.storyboard 和 LaunchScreen.xib: 3.打开 Supporting Files ...
- docker资源汇总
https://github.com/hangyan/docker-resources/blob/master/README_zh.md https://github.com/lightning- ...
- Python使用三种方法实现PCA算法[转]
主成分分析(PCA) vs 多元判别式分析(MDA) PCA和MDA都是线性变换的方法,二者关系密切.在PCA中,我们寻找数据集中最大化方差的成分,在MDA中,我们对类间最大散布的方向更感兴趣. 一句 ...