你谷又乱评分……

首先发现答案只有可能是从$1$开始走到$n$,中间绕若干个环,然后使它取到的异或值最大。

这样子的话我们可以随便先取一条路径,强制选择走这条路径,然后把所有的环都丢进线性基里面去,因为如果要选择一个环,我们从路径中的一个点走出去然后在这个环上绕几圈然后走回来,发现中间这个“走出去”,“走回来”的过程中的点被异或了两遍,相当于不产生贡献。

其实就是搜一遍的事情。

时间复杂度$O(nlogn)$。

Code:

#include <cstdio>
#include <cstring>
using namespace std;
typedef long long ll; const int N = 5e4 + ;
const int M = 2e5 + ; int n, m, tot = , head[N];
ll dis[N];
bool vis[N]; struct Edge {
int to, nxt;
ll val;
} e[M]; inline void add(int from, int to, ll val) {
e[++tot].to = to;
e[tot].val = val;
e[tot].nxt = head[from];
head[from] = tot;
} template <typename T>
inline void read(T &X) {
X = ; char ch = ; T op = ;
for(; ch > '' || ch < ''; ch = getchar())
if(ch == '-') op = -;
for(; ch >= '' && ch <= ''; ch = getchar())
X = (X << ) + (X << ) + ch - ;
X *= op;
} inline void chkMax(ll &x, ll y) {
if(y > x) x = y;
} namespace Lp {
ll p[]; inline void ins(ll val) {
for(int i = ; i >= ; i--) {
if((val >> i) & ) {
if(!p[i]) {
p[i] = val;
break;
}
val ^= p[i];
}
}
} inline ll query(ll res) {
for(int i = ; i >= ; i--)
chkMax(res, (res ^ p[i]));
return res;
} } using namespace Lp; void dfs(int x) {
for(int i = head[x]; i; i = e[i].nxt) {
int y = e[i].to;
if(!vis[y]) {
vis[y] = ;
dis[y] = dis[x] ^ e[i].val;
dfs(y);
} else ins(dis[x] ^ dis[y] ^ e[i].val);
}
} int main() {
read(n), read(m);
for(int x, y, i = ; i <= m; i++) {
read(x), read(y);
ll v; read(v);
add(x, y, v), add(y, x, v);
} dfs(); printf("%lld\n", query(dis[n]));
return ;
}

Luogu 4151 [WC2011]最大XOR和路径的更多相关文章

  1. P4151 [WC2011]最大XOR和路径

    P4151 [WC2011]最大XOR和路径 一道妙极了的题. 首先直接从1走到n 然后现在图上有很多环 所以可以在走到n之后走到环上一个点,再走一遍环,再原路返回.这样就会xor上环的权值. 然后只 ...

  2. 洛谷 P4151 [WC2011]最大XOR和路径 解题报告

    P4151 [WC2011]最大XOR和路径 题意 求无向带权图的最大异或路径 范围 思路还是很厉害的,上午想了好一会儿都不知道怎么做 先随便求出一颗生成树,然后每条返祖边都可以出现一个环,从的路径上 ...

  3. [WC2011]最大XOR和路径 线性基

    [WC2011]最大XOR和路径 LG传送门 需要充分发掘经过路径的性质:首先注意不一定是简单路径,但由于统计的是异或值,重复走是不会被统计到的,考虑对于任意一条从\(1\)到\(n\)的路径的有效部 ...

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

    P4151 [WC2011]最大XOR和路径 题目描述 XOR(异或)是一种二元逻辑运算,其运算结果当且仅当两个输入的布尔值不相等时才为真,否则为假. XOR 运算的真值表如下( 1 表示真, 0 表 ...

  5. 题解-[WC2011]最大XOR和路径

    [WC2011]最大XOR和路径 给一个 \(n\) 个点 \(m\) 条边(权值为 \(d_i\))的无向有权图,可能有重边和子环.可以多次经过一条边,求 \(1\to n\) 的路径的最大边权异或 ...

  6. 洛谷P4151 [WC2011] 最大XOR和路径 [线性基,DFS]

    题目传送门 最大XOR和路径 格式难调,题面就不放了. 分析: 一道需要深刻理解线性基的题目. 好久没打过线性基的题了,一开始看到这题还是有点蒙逼的,想了几种方法全被否定了.还是看了大佬的题解才会做的 ...

  7. [BZOJ2115][WC2011]最大XOR和路径

    bzoj luogu sol 首先很显然的,答案等于1到n的任意一条路径的异或和与若干个环的异或和的异或和. 因为图是联通的,那么就可以从一个点走到任意一个想要走到的环上,走完这个环后原路返回,那么中 ...

  8. luoguP4151 [WC2011]最大XOR和路径

    题意 这题有点神啊. 首先考虑注意这句话: 路径可以重复经过某些点或边,当一条边在路径中出现了多次时,其权值在计算 XOR 和时也要被计算相应多的次数 也就是说如果出现下面的情况: 我们可以通过异或上 ...

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

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

随机推荐

  1. MAC 下配置MQTT 服务器Mosquitto

    一.简单介绍   1.MQTT是IBM开发的一个即时通讯协议.MQTT是面向M2M和物联网的连接协议,采用轻量级发布和订阅消息传输机制.    2.Mosquitto是一款实现了 MQTT v3.1 ...

  2. L107

    It is advisable to take an open- minded approach to new idea. 对新思想采取不存先入之见的态度是明智的.That said, the com ...

  3. Linux 下如何调试 Python?

    一般开发者都是在 IDE 中进行程序的调试,当然,有 IDE 的话,当然首选 IDE 进行调试. 但是,有时我们的业务场景,限制只能在 Linux 命令行模式进行调试. 这时该怎么办呢? 今天,就给大 ...

  4. 一文搞定 Git 相关概念和常用指令

    我几乎每天都使用 Git,但仍然无法记住很多命令. 通常,只需要记住下图中的 6 个命令就足以供日常使用.但是,为了确保使用地很顺滑,其实你应该记住 60 到 100 个命令. Git 相关术语 Gi ...

  5. 【java规则引擎】之Drools引擎中模拟ReteooStatefulSession内部设计结构

    该片文章只是抽取drools中java代码实现的一些代码结构,帮助我们理解drools是如何实现rete算法的. 该部分只是抽取ReteooStatefulSession工作过程中的代码架构 利用了多 ...

  6. dubbo的监控中心

    监控中心实际上就是一个web工程. 是dubbo官方给我们提供的一个war包. 只需要部署在Tomcat中就可以了. 推荐把监控中心与注册中心部署在一台服务器上,这样可以不需要任何配置. 部署完成后直 ...

  7. TIJ摘要:访问控制权限

    重构的原动力之一:发现有更好的方式去实现相同的功能. OOP需要考虑的基本问题:如何把变动的事物与不变的事物区分开来. 访问控制权限:以供类库开发人员向客户端程序员指明哪些是可用的,哪些是不可用的.访 ...

  8. Java基础--枚举Enum

    Java中的枚举是一种特殊的类,可以将一组固定常量的集合组成一种类型,使用方便且类型安全.使用enum关键字定义. enum类型父类为Enum,通过Enum.class可见Enum为抽象类,实现了Co ...

  9. 侯捷STL学习(五)--allocator和容器之间的实现关系

    第十一节 分配器 STL源码学习----内存管理 分配器的好坏影响到容器的性能 operator new()里面调用malloc D:\Program Files (x86)\Microsoft Vi ...

  10. pycharm中 unittests in xxxx 运行模式

    pycham中 当你运行时 ,使用的 是  Run "unittests in  xxxx" 模式时候,if __name__ == '__main__':  后面的代码是不执行的 ...