洛谷传送门

文章目录

  • 题目描述
  • 解析
  • 代码

题目描述

解析

本题关键就在于一点:
若把每个点的深度dep[i]定义为从根到节点边权的异或和
那么i到j的路径异或和可以表示为:

dep[i] ^ dep[j]

首先要是i、j在不同子树上显然成立
如果他们在同一子树上,那么它们到根的公共部分异或两遍会抵消
所以也是成立的

这样dfs一遍求出dep数组
本题就变成01trie的模板题了

代码

#include<bits/stdc++.h>
using namespace std;
#define ll long long
typedef unsigned long long ull;
const int N = 1e6+100;
const int M=1e7+5;
const int mod=1e9+7;
int n,m;
int tr[N][3],tot=1,end[N];
int fi[N],cnt=-1;
struct node{int to,nxt,v;
}p[N<<1];
void addline(int x,int y,int v){p[++cnt]=(node){y,fi[x],v};fi[x]=cnt;
}
int dep[N];
void dfs(int x,int f){for(int i=fi[x];~i;i=p[i].nxt){int to=p[i].to;if(to==f) continue;dep[to]=dep[x]^p[i].v;dfs(to,x);}return;
}
int mi[33];
int s[33],k;
void build(int o){for(int i=0;i<=30;i++){s[i]=o&mi[i]?1:0;}int p=1;for(int i=30;i>=0;i--){if(!tr[p][s[i]]) tr[p][s[i]]=++tot;p=tr[p][s[i]];}end[p]++;
}int ask(int o){for(int i=0;i<=30;i++){s[i]=o&mi[i]?1:0;}int p=1,res=0;for(int i=30;i>=0;i--){int now=s[i];if(tr[p][!now]){p=tr[p][!now];res+=mi[i];}else p=tr[p][now];}return res;
}
int main(){mi[0]=1;for(int i=1;i<31;i++) mi[i]=mi[i-1]<<1;memset(fi,-1,sizeof(fi));scanf("%d",&n);for(int i=1;i<n;i++){int a,b,c;scanf("%d%d%d",&a,&b,&c);addline(a,b,c);addline(b,a,c);}dfs(1,0);for(int i=1;i<=n;i++){build(dep[i]);}int ans=0;for(int i=1;i<=n;i++){ans=max(ans,ask(dep[i]));}printf("%d",ans);return 0;
}
/*
9 6 10
5 6 2 10 10 7 3 2 9
1 4 4 3 2 16 4 10
3 5 2 7 1 9
3 8 2 10
*/

YBTOJ洛谷P4551:最长异或路径(trie树)相关推荐

  1. 洛谷 P4551 最长异或路径

    题目描述 给定一棵 nn 个点的带权树,结点下标从 11 开始到 NN .寻找树中找两个结点,求最长的异或路径. 异或路径指的是指两个结点之间唯一路径上的所有节点权值的异或. 输入输出格式 输入格式: ...

  2. 01tire+洛谷P4551 最长异或路径

    题目: 给定一棵n个点的带权树,结点下标从1开始到N.寻找树中找两个结点,求最长的异或路径. 异或路径指的是指两个结点之间唯一路径上的所有边权的异或. 输入格式 第一行一个整数NN,表示点数. 接下来 ...

  3. P4551 最长异或路径

    P4551 最长异或路径 题意: 给定一棵 n 个点的带权树,结点下标从 1 开始到 n.寻找树中找两个结点,求最长的异或路径. 异或路径指的是指两个结点之间唯一路径上的所有边权的异或. 题解: 我们 ...

  4. YBTOJ洛谷P4331:数字序列(左偏树)

    文章目录 题目描述 数据范围 解析 代码 题目描述 数据范围 n<=1e6n<=1e6n<=1e6 解析 先考虑简单情况 如果原数列是单调递增的,显然应该使bi=aib_i=a_ib ...

  5. 洛谷 P3732 [HAOI2017]供给侧改革【trie树】

    参考:http://blog.csdn.net/di4covery/article/details/73065684 我以为是后缀数组+某某数据结构,结果居然是01trie!!题解说"因为是 ...

  6. luoguP4551最长异或路径

    P4551最长异或路径 链接 luogu 思路 从\(1\)开始\(dfs\)求出\(xor\)路径.然后根据性质\(x\)到\(y\)的\(xor\)路径就是\(xo[x]^xo[y]\) 代码 # ...

  7. 信息学奥赛一本通 1116:最长平台 | OpenJudge NOI 1.9 12:最长平台 | 洛谷 B2097 最长平台

    [题目链接] ybt 1116:最长平台 OpenJudge NOI 1.9 12:最长平台 洛谷 B2097 最长平台 [题目考点] 1. 数组中做统计 2. 求最大值 [解题思路] 解法1:遍历并 ...

  8. 洛谷P1807 最长路_NOI导刊2010提高(07) 求有向无环图的 最长路 图论

    洛谷P1807 最长路_NOI导刊2010提高(07) 图论 求有向无环图的 最长路 首先阐明一点 最长路dijkstra 是不能做 (当然我是不会做的,不过我貌似看到过网上的dalao有用dijst ...

  9. 洛谷 P1873 [COCI 2011/2012 #5] EKO / 砍树

    题目传送门: 洛谷 P1873 [COCI 2011/2012 #5] EKO / 砍树 题目描述 伐木工人 Mirko 需要砍 M 米长的木材.对 Mirko 来说这是很简单的工作,因为他有一个漂亮 ...

最新文章

  1. 德国阿尔迪成功启示录(转载)
  2. 深入浅出JMS(一)——JMS简单介绍
  3. 商城html源码_延边小程序商城
  4. Django_前端显示Matplotlib画的图(亲测)
  5. .Net Core小技巧 - 使用Swagger上传文件
  6. 案例:手动输入一个字符串,打散放进一个列表,小写字母反序 大写字母保持不变...
  7. AI和大数据结合,智能运维平台助力流利说提升竞争力
  8. Vim快捷键(四):Vim查找与替换
  9. mysql基础面试题大全
  10. Termux使用教程
  11. ICP备案线下注销 网站域名备案注销
  12. Java多线程大合集
  13. 后台管理系统项目整体流程
  14. 魔方教程一步一步图解(史上最简单的魔方入门教程)新手一看就会
  15. xbox one 手柄在ubuntu下的使用和开发
  16. 量化进阶——如何突破期货交易难点
  17. (转)有个星座叫天平(一)
  18. Spark提交报错:1 node(s) are excluded in this operation
  19. 2022生物医药大会将于在北京7月举行
  20. 遇到的android_bug总结

热门文章

  1. Spark运行原理剖析
  2. 手把手教你用Java的swing制作计算器
  3. android fragmentstatepageradapter框架,安卓爬坑指南之FragmentStatePagerAdapter
  4. php文件上传实验总结,53 PHP文件处理(六)文件上传--总结---细说php
  5. html站点如何命名,html页面的CSS、DIV命名规则
  6. 分支结构程序案例c语言,C语言学习之三——分支结构程序
  7. qdialog 只有点击才能获得焦点_4 个突破点,让你的 Banner 点击率提升10倍
  8. java 固定长度队列_如何彻底搞懂 Java 数据结构?|CSDN 博文精选
  9. 机器学习之模型——保存与加载
  10. 数据结构——基于字符串模式匹配算法的病毒感染检测