【Trie】The XOR-longest Path
【题目链接】:
【题意】
请输出树上两个点的异或路径 的最大值。
【题解】
这个题目,y总说过怎么做之后,简直就是醍醐灌顶了。
我们知道Xor路径,我们从根结点处理所有结点的 到根结点的异或和,我们想要两个点的异或路径。
其实就是利用根结点 到两个点 异或和 。因为LCA到根结点异或了两遍,所以答案就保留了异或路径的部分。
其实这个题目就是Xor——pair的变种。
处理从根结点出发的所有结点的位置的异或值。
【代码】
#include<cstdio>
#include<cstring>
#include<algorithm>
using namespace std;
const int N = 1e5 + ;
int Son[N*][];
typedef struct Edge{
int To , next , w ;
}Edge ;
Edge e[N<<];
int Head[N],cnt,Dis[N],idx;
void Init(){
memset( Head , - ,sizeof Head );
cnt = idx = ;
}
void Add_edge ( int u, int v ,int w ){
e[cnt] = Edge { v , Head[u] , w };
Head[u] = cnt ++ ;
} void dfs(int u,int Fa,int w ){
Dis[u] = w ;
for(int i = Head[u] ; ~i ; i = e[i].next){
int To = e[i].To;
if( To == Fa ) continue ;
dfs( To , u , w ^ e[i].w );
}
} void Insert ( int x ){
int p = ;
for (int i=;~i;i--){
int t = x >> i & ;
if( !Son[p][t] )
Son[p][t] = ++idx ;
p = Son[p][t] ;
}
}
int Query(int x ){
int p = ,res = ;
for(int i=;~i;i--){
int t = x >> i & ;
if( Son[p][t^] ){
res += << i ;
p = Son[p][t^];
}else{
p = Son[p][t] ;
}
}
return res ;
}
int main()
{
Init();
int n ;
scanf("%d",&n);
for(int i=,u,v,w;i<n;i++){
scanf("%d%d%d",&u,&v,&w);
Add_edge( u , v , w );
Add_edge( v , u , w );
}
dfs( , - , ) ;
/*
for(int i=1;i<=n;i++){
printf("###%d###\n",Dis[i]);
}
*/
for(int i=;i<=n;i++){
Insert( Dis[i] );
}
int res = ;
for(int i=;i<=n;i++){
res = max( res , Query(Dis[i] ) );
}
printf("%d\n",res) ;
return ;
}
【Trie】The XOR-longest Path的更多相关文章
- 【Trie】The XOR Largest Pair
[题目链接] https://loj.ac/problem/10050 [题意] 给出n个数,其中取出两个数来,让其异或值最大. [题解] 经典的01字典树问题. 首先需要把01字典树建出来. 然后对 ...
- 【BZOJ2337】[HNOI2011]XOR和路径 期望DP+高斯消元
[BZOJ2337][HNOI2011]XOR和路径 Description 题解:异或的期望不好搞?我们考虑按位拆分一下. 我们设f[i]表示到达i后,还要走过的路径在当前位上的异或值得期望是多少( ...
- 【BZOJ2115】[Wc2011] Xor 高斯消元求线性基+DFS
[BZOJ2115][Wc2011] Xor Description Input 第一行包含两个整数N和 M, 表示该无向图中点的数目与边的数目. 接下来M 行描述 M 条边,每行三个整数Si,Ti ...
- 【BZOJ4269】再见Xor 高斯消元
[BZOJ4269]再见Xor Description 给定N个数,你可以在这些数中任意选一些数出来,每个数可以选任意多次,试求出你能选出的数的异或和的最大值和严格次大值. Input 第一行一个正整 ...
- 【Trie】Nikitosh 和异或
[参考博客]: LOJ#10051」「一本通 2.3 例 3」Nikitosh 和异或(Trie [题目链接]: https://loj.ac/problem/10051 [题意]: 找出两个不相交区 ...
- 【bzoj4296】再见Xor
4269: 再见Xor Time Limit: 10 Sec Memory Limit: 512 MBSubmit: 176 Solved: 107[Submit][Status][Discuss ...
- 【bzoj2115】[Wc2011] Xor
2115: [Wc2011] Xor Time Limit: 10 Sec Memory Limit: 259 MBSubmit: 2512 Solved: 1049[Submit][Status ...
- 【Trie】背单词
参考博客: https://www.luogu.org/problemnew/solution/P3294 https://blog.csdn.net/VictoryCzt/article/detai ...
- 【Trie】L 语言
[题目链接]: https://loj.ac/problem/10053 [题意]: 给出n个模式串.请问文本串是由多少个模式串组成的. [题解]: 当我学完AC自动机后,发现这个题目也太简单了吧. ...
随机推荐
- wqy的C题
wqy的C题 毒瘤! 题意: 你有一张 $ n $ 个点 $ m $ 条边的无向图. 你想在这张图上添加 $ n $ 条有向边,每一条有向边连接两个点 $ u,v $ ,你需要保证 $ u,v $ 在 ...
- 手写alert弹框(一)
采用原生的JavaScript, html代码 <meta name="viewport" content="width=device-width, initial ...
- php判断两个数组是否相等
php判断两个数组是否相等 一.总结 一句话总结: php判断两个数组是否相等可以直接上==或者===号 二.php 判断两个数组是否相等 转自或参考:php 判断两个数组是否相等https://ww ...
- android Vitamio Live 实时视频 记录
Vitamio 下载地址: https://github.com/yixia/VitamioBundle/releases https://github.com/yixia/VitamioBundle ...
- 阶段5 3.微服务项目【学成在线】_day05 消息中间件RabbitMQ_3.RabbitMQ研究-工作原理
Producer生产者 Consumer:消费者 组成部分说明如下: Broker:消息队列服务进程,此进程包括两个部分:Exchange和Queue. Exchange:消息队列交换机,按一定的规则 ...
- 图解 HTTP 笔记(三)—— HTTP 报文内的 HTTP 信息
本章主要讲解请求和响应是如何运作的 一.HTTP 报文 用于 HTTP 协议交互的信息被称为 HTTP 报文,客户端的 HTTP 报文叫做请求报文,服务器端的叫做响应报文. HTTP 报文大致可分为报 ...
- Spring事务管理1-------环境搭建
Spring将事务管理分成了两类: * 编程式事务管理 手动编写代码进行事务管理,开发中使用较少 * 声明式事务管理 A - 基于TransactionProxyFactoryBean的方式.开发使用 ...
- MySQL 判断数据库和数据表是否存在
MySQL 判断数据库和数据表是否存在 如何使用SQL查询语句,判断数据库和数据表是否存在? 1.判断数据库是否存在 查询SQL如下: select * from information_schema ...
- XGBoost原理详解
原文:https://blog.csdn.net/qq_22238533/article/details/79477547
- Bilateral Multi-Perspective Matching for Natural Language Sentences---读书笔记
自然语言句子的双向.多角度匹配,是来自IBM 2017 年的一篇文章.代码github地址:https://github.com/zhiguowang/BiMPM 摘要 这篇论文主要 ...