【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自动机后,发现这个题目也太简单了吧. ...
随机推荐
- 微信小程序之简单记账本开发记录(四)
昨天搭建了大致界面 今天需要将用到的一系列样式表配置出来并检查错误
- Git生成本机SSH Key并添加到GitHub中
1.检查电脑里是否有SSH Key 打开git Bash客户端 cd ~/.ssh ls 如果有就会输出下面内容 config id_rsa id_rsa.pub known_hosts 2.创建 邮 ...
- JAVA基础知识|小知识点
1.强烈建议,不使用char类型 那么,到底为什么java里不推荐使用char类型呢?其实,1个java的char字符并不完全等于一个unicode的字符.char采用的UCS-2编码,是一种淘汰的U ...
- make 和 make install 的区别
简单来说,make 是编译,make install 是安装. 总结:linux编译安装中configure.make和make install各自的作用 ./configure是用来检测你的安装平台 ...
- IdentityServer4入门一
这几天学习IdentityServer4,感觉内容有点乱,也可能自己水平有限吧.但为了巩固学习的内容,也打算自己理一下思路. 首先IdentityServer解决什么问题? 下图是我们的一个程序的组织 ...
- Linux 之Shell for循环
@代表所有参数所以如果后面跟上echo $v你会发现他会一次显示user userdebug eng $poo -le ${#prodlist[@]} 这句话是说 $poo小于等于prodlist中的 ...
- CodeWar打怪升级-Python篇
1. The goal of this exercise is to convert a string to a new string where each character in the new ...
- CDH构建大数据平台-Kerberos高可用部署【完结篇】
CDH构建大数据平台-Kerberos高可用部署[完结篇] 作者:尹正杰 版权声明:原创作品,谢绝转载!否则将追究法律责任. 一.安装Kerberos相关的软件包并同步配置文件 1>.实验环境 ...
- TomCat概述
作用: * 用来接收客户端的请求 * 处理请求, 把动态资源转换成了静态资源(web容器) * 给客户端响应 服务器的分类: * weblogic: oracle公司大型的JavaEE服务器收费的 * ...
- Qt编写自定义控件34-磁盘容量统计
一.前言 磁盘容量统计控件,说白了,就是用来统计本地盘符占用的容量,包括但不限于已用空间.剩余空间.总大小.已用百分比等,其中对应的百分比采用进度条显示,该进度条的前景色和背景色及文字颜色可以设置,在 ...