# 解题思路

两点之间的路径的话一定经过它们两个 LCA,这一点已经是显而易见的,那么再来看看异或的性质。

$$a\ xor\ b\ xor\ b = a\\ a\ xor\ a=0\\ a\ xor\ 0 = a\\ a\ xor\ b = b\ xor\ a\\ a\ xor\ b\ xor\ c = a\ xor\ (b\ xor\ c)$$

再回到这个题上来,因为 $a\ xor\ b\ xor\ b = a$,所以从根节点出来的一条路径我们可以预先处理一个异或和出来。

在询问的时候再将多余的路径给异或掉。设两点的 LCA 为 z,那么答案就是 $dis[tmp]\ xor\ dis[x]\ xor\ dis[tmp]\ xor\ dis[y]$

有第一条性质 $a\ xor\ b\ xor\ b = a$ 可以化简上式,答案就变成了 $dis[x]\ xor\ dis[y]$,化简后我们发现根本就不需要求 LCA。

下面给出代码。

# 代码

#include <iostream>
#include <cstring>
#include <cstdio>
#include <cmath>
using namespace std;
const int maxn = 1e5+3;
int n, m, head[maxn], cnt, dis[maxn], rt = 1, fa[maxn][32];
struct edge {int to, w, nxt;} ed[maxn << 1];
void read(int &x) {x = 0; int f = 1; char c = getchar();while (c < '0' || c > '9') {if(c == '-') f = -1; c = getchar();}while (c <= '9' && c >= '0') {x = x*10 + c-'0'; c = getchar();}x *= f;
}
struct HAHA {void addedge(int u, int v, int w) {ed[++cnt].nxt = head[u], head[u] = cnt, ed[cnt].to = v, ed[cnt].w = w;}void dfs(int u) {for(int i=head[u]; i; i=ed[i].nxt) {if(ed[i].to == fa[u][0]) continue;dis[ed[i].to] = dis[u] ^ ed[i].w;fa[ed[i].to][0] = u;dfs(ed[i].to);}}
}T;
int main() {read(n);int x, y, z;for(int i=1; i<n; i++) {read(x), read(y), read(z);T.addedge(x, y, z), T.addedge(y, x, z);}T.dfs(rt);read(m);for(int i=1; i<=m; i++) {read(x), read(y);printf("%d\n", dis[x]^dis[y]);}
}

转载于:https://www.cnblogs.com/bljfy/p/9776058.html

「 Luogu P2420 」 让我们异或吧相关推荐

  1. 「 Luogu P2574 」 XOR的艺术——线段树

    # 解题思路 这题不难,但是原谅我一开始的傻逼想法,一会儿再给大家透露透露. 先说怎么做这题. 显然对于 $0$ 和 $1$ 来说,异或无非也就只有两种变化 异或了奇数次,$0$ 就会变成 $1$,$ ...

  2. 「Luogu P2201」数列编辑器 解题报告

    数列编辑器,在线IDE 本期的主题是洛谷的在线IDE 小学生?!小学生虐我 ? 思路: 怎么说链表也是可以的吧,虽然比较繁琐 然后涉及到了前缀和和一些优化手段(应该可以说是记忆化吧)? 用p记录光标的 ...

  3. 「 Luogu P2657 」 windy数

    # 题目大意 给出区间 $[a,b]$,求出区间中有多少数满足下列两个条件 不含有前导 $0$. 相邻两个数字之差的绝对值至少是 $2$. # 解题思路 数位 $DP$,用记忆化搜索来实现.设 $dp ...

  4. 【文末送5本书】与「韦神」齐名,35岁刁晗生任教清华!18岁一战成名,数学界颜值巅峰...

      视学算法报道   编辑:桃子 文末包邮送5本价值百元的高质量技术书籍 [新智元导读]除「韦神」外,北大还有一位和韦东奕并驾齐驱的数学天才.他就是刁晗生,18岁在第46届IMO上一战成名,还一手集齐 ...

  5. 全球首个「活体机器人」生娃!100%青蛙基因,杀不死,可繁衍4世

      视学算法报道   编辑:桃子.David [新智元导读]活体机器人「生娃」?全球首次,实属罕见!2020年1月,美国科学家利用从青蛙胚胎中提取的活细胞,创造出全球首个活体机器人Xenobot.现在 ...

  6. DeepMind、哈佛造出了 AI「小白鼠」,从跑、跳、觅食、击球窥探神经网络的奥秘...

    机器之心报道 机器之心编辑部 我们可以用研究小白鼠的方式来研究 AI 吗?或许可以.在一篇 ICLR 2020 Spotlight 论文中,DeepMind 和哈佛大学的研究者构建了一个基于 AI 的 ...

  7. 腾讯林衍凯:图神经网络,考虑「拓扑信息」会怎样?

    ‍‍ 本文整理自林衍凯在「2021北京智源大会 · 青源学术年会」上的报告<考虑拓扑信息的图神经网络学习>. 关注[智源社区]公众号 后台回复[2021智源大会报告]获取<2021北 ...

  8. 「硅仙人」吉姆 · 凯勒:我在特斯拉是最闲的员工,却要在英特尔管一万人

    点击上方"AI遇见机器学习",选择"星标"公众号 重磅干货,第一时间送达 来自:机器之心 芯片业界传奇人物的「凡尔赛」方式也是与众不同的. 从英特尔离职半年后, ...

  9. 网易云信牵手有道乐读,解密「终身阅读者」背后的技术力量

    人是一棵会思考的芦苇.在漫长的演化过程中,人类无时无刻不在进行着思考并持续进步. 阅读是拓展思考宽度与深度的重要方式之一.当下,越来越多的家长愈加重视孩子阅读习惯的养成,认为科学的阅读方法能开阔孩子的 ...

最新文章

  1. JGG:青岛大学苏晓泉团队利用条件致病菌指数评估环境微生物风险
  2. AI:2020年6月16日晚20点陆奇博士演讲《陆奇直播万字实录:正视挑战,把握创业创新机会》
  3. Map转xml格式字符串
  4. 基础回顾(正则、循环、和、 int和Integer、String /StringBuffer、Array和ArrayList、值传递和引用传递、 Lamda、java8)
  5. LVS(11)——wrr
  6. 数据挖掘概念与技术12--数据立方体的计算和多路数组聚集详解
  7. 与您相约.NET Conf China 2020! 新进2位重磅嘉宾
  8. 3 二分频verilog与Systemverilog编码
  9. 【贪心 和 DP + 卖股票】LeetCode 122. Best Time to Buy and Sell Stock II
  10. 黑马程序员全套Java教程_Java基础入门视频教程零基础自学Java必备教程视频讲义(2)
  11. 【Opencv】基于色差的简单目标提取
  12. 计算机英语这门课上后感1000,英语公开课观后感作文1000字
  13. 记一次某制造业ERP系统 CPU打爆事故分析
  14. 副业项目:今日头条音频项目,日入200+
  15. 移动端浏览器有哪些,内核分别是什么
  16. Lory Carousel滑块具有CSS动画和触摸支持
  17. mysql启动不了的原因_mysql启动不了是什么原因
  18. 时间片轮转算法(c++)
  19. qml 分隔工具栏ToolSeparator 工具提示ToolTip 旋转轮Tumbler
  20. 一文搞清电子认证相关概念:CA、证书、PKI、CSR、SSL、TSL、CRT、CER、PEM、RSA等

热门文章

  1. 【sublime Text】关闭sublime的更新提醒和激活提醒
  2. 与webview打交道中踩过的那些坑
  3. 如何让文本框中只能输入手机号码
  4. windows下网络丢包模拟软件(Network Emulator for Windows Toolkit)
  5. android不能使用udp获取数据解决
  6. 最全 | Redis可视化工具横向评测
  7. 首次公开:京东数科强一致、高性能分布式事务中间件 JDTX
  8. 大数据凉了?No,流式计算浪潮才刚刚开始!
  9. PaaS平台应用的12要素原则
  10. Spring Boot:定制自己的starter