POJ3764 The xor-longest Path(字典树)
题意
给你一棵树,n个节点,n-1条边每条边i都有一个权值wi。定义任意两点间的权值为:这两点间的路径上的所有边的值的异或。比如a点和b点间有i,j,k三条边,那么ab两点间的权值为:wi^wj^wk。求这个最大的权值(最长异或路径)。
(n<=105)
题解
首先 边权可以放到点权上
然后我们可以搞一个树上的前缀异或和.
这样的话 把当前点的所有点权加到trie树里
从最高位到最低位走不同的路
例:1011100101
我们要走:0100011010
如果走不了就顺着走
跑出来的数异或当前的数就是经过这个点的最优解了
1 #include<iostream> 2 #include<cstring> 3 #include<cstdio> 4 #include<cmath> 5 #include<algorithm> 6 using namespace std; 7 const long long N=201000; 8 long long ans,tot,cnt,head[N],n,mx,flag; 9 struct edge{ 10 long long to,nxt,w; 11 }e[N*2]; 12 struct tree{ 13 long long nxt[4]; 14 }tr[N*50]; 15 void insert(long long a){ 16 long long now=0,z; 17 for(long long i=31;i>=1;i--){ 18 if(a&(1<<(i-1)))z=1; 19 else z=0; 20 if(!tr[now].nxt[z]){ 21 tr[now].nxt[z]=++tot; 22 memset(tr[tot].nxt,0,sizeof(tr[tot].nxt)); 23 } 24 now=tr[now].nxt[z]; 25 } 26 } 27 void check(long long x){ 28 long long tmp=0; 29 long long now=0,z; 30 for(long long i=31;i>=1;i--){ 31 if(x&(1<<(i-1)))z=1; 32 else z=0; 33 if(tr[now].nxt[!z]){ 34 tmp=(tmp<<1)+1; 35 now=tr[now].nxt[!z]; 36 } 37 else{ 38 tmp=tmp<<1; 39 now=tr[now].nxt[z]; 40 } 41 } 42 ans=max(ans,tmp); 43 } 44 void add(long long u,long long v,long long w){ 45 cnt++; 46 e[cnt].nxt=head[u]; 47 e[cnt].to=v; 48 e[cnt].w=w; 49 head[u]=cnt; 50 } 51 void dfs1(long long u,long long f,long long w){ 52 insert(w); 53 for(long long i=head[u];i;i=e[i].nxt){ 54 long long v=e[i].to; 55 if(v==f)continue; 56 w^=e[i].w; 57 dfs1(v,u,w); 58 w^=e[i].w; 59 } 60 } 61 void dfs2(long long u,long long f,long long w){ 62 check(w); 63 for(long long i=head[u];i;i=e[i].nxt){ 64 long long v=e[i].to; 65 if(v==f)continue; 66 w^=e[i].w; 67 dfs2(v,u,w); 68 w^=e[i].w; 69 } 70 } 71 int main(){ 72 while(~scanf("%lld",&n)){ 73 ans=0;cnt=0;tot=0;mx=0;flag=0; 74 memset(head,0,sizeof(head)); 75 memset(tr[0].nxt,0,sizeof(tr[0].nxt)); 76 for(long long i=1;i<=n-1;i++){ 77 long long u,v,w; 78 scanf("%lld%lld%lld",&u,&v,&w); 79 u++;v++; 80 add(u,v,w); 81 add(v,u,w); 82 } 83 insert(0); 84 dfs1(1,0,0); 85 dfs2(1,0,0); 86 printf("%lld\n",ans); 87 } 88 return 0; 89 }
转载于:https://www.cnblogs.com/Xu-daxia/p/9559154.html
POJ3764 The xor-longest Path(字典树)相关推荐
- HDU4825 Xor Sum 01字典树(Tire Tree)
Xor Sum Time Limit: 2000/1000 MS (Java/Others) Memory Limit: 132768/132768 K (Java/Others) Total ...
- 【CF1616H】Keep XOR Low(字典树)
题面 题解 为了方便,我们将 xxx 加 1,然后让 aixoraj<xa_i\mathrm{~xor~}a_j<xai xor aj<x . 可以把数插入到字典树中,然后遍历字 ...
- CodeForces - 979D Kuro and GCD and XOR and SUM(字典树+暴力+模拟)
题目链接:点击查看 题目大意:说实话看到这么复杂而且还是英文的题面我是拒绝的,但题还是得补啊,就去百度找的题解看题意,题意大概是这样的: 给出n个操作,每个操作分为两种类型: 1 x:向集合中插入x ...
- POJ - 3764 The xor-longest Path(字典树性质)
题目链接:点击查看 题目大意:给出一棵树,每条边上都有一个边权,现在问能否选择两个点,使得其间路径上的异或和最大 题目分析:直接求肯定是比较复杂的,我们可以转换一下题意,因为是一棵树,所以n个点肯定互 ...
- 提高篇 第二部分 字符串算法 第3章 Trie字典树
Trie(字典树)解析及其在编程竞赛中的典型应用举例 - Reqaw - 博客园 『一本通』Trie字典树 - YeLingqi - 博客园 字典树(Trie Tree) - 仰望高端玩家的小清新 - ...
- 字典树--Xor问题
字典树大家都知道吧,如果不知道可以看这里,我的模板写得还是不错的: 字符串–Trie树(字典树) 接下来我们先看一个问题,通过这个问题来了解Xor这个运算的基本性质: 洛谷 P2420 让我们异或吧 ...
- LeetCode 14. Longest Common Prefix字典树 trie树 学习之 公共前缀字符串
所有字符串的公共前缀最长字符串 特点:(1)公共所有字符串前缀 (好像跟没说一样...) (2)在字典树中特点:任意从根节点触发遇见第一个分支为止的字符集合即为目标串 参考问题:https://lee ...
- nyoj 947 Max Xor(字典树)
Max Xor 时间限制:3000 ms | 内存限制:65535 KB 难度:4 描述 给一个长度为 n 的数列 {an} ,找出 max {ai ^ aj}. 输入 多组测试数据. 第 1 行 ...
- HDU多校1 - 6955 Xor sum(字典树+贪心)
题目链接:点击查看 题目大意:给出一个长度为 nnn 的序列,要求找到一段长度最短的区间,使得异或和大于等于 kkk,如果有多种答案,输出左端点最小的那个 题目分析:倒着维护一下后缀异或和,将后缀异或 ...
- POJ3764-The xor-longest Path【Trie(字典树)】
正题 POJ题目链接:http://poj.org/problem?id=3764 其实loj也有题目:https://loj.ac/problem/10056 题目大意 一棵树,求两个点使他们的之间 ...
最新文章
- java 移动支付接口开发,移动支付平台间接口报文解析技术核心架构实现、及平台交易处理项目全程实录教程...
- iOS标准时间与时间戳相互转换
- notepad++ 远程连接阿里云服务器
- Windows下运行jekyll,编码已不再是问题
- H.264视频开发---代码移植
- IoT -- (五) IoT都有哪些通信协议
- magicmatch java_Java-webmagic爬虫
- c++多线程——简单线程池
- Unity3D基础42:AnyState大法
- 宝藏女孩程序媛,谈谈职场成长这些事
- linux教程,linux视频教程,linux…
- ubuntu下adb的使用以及开启黑域
- Proface触摸屏与三菱PLC软件仿真(或连接实体PLC)
- mysql是个单用户数据库_MySQL是一个支持单用户的数据库管理系统 答案:×
- t检验和wilcoxon秩和检验 判断两组数据间的显著性差异
- 手机微信wifi怎么连接到服务器地址,出门在外用手机流量太贵,教你一招,用微信就能连接附近wifi...
- 关于Android短信拦截(二)
- Java / Tensorflow - API 调用 pb 模型使用 GPU 推理
- 众多促销标签免抠元素素材一键即可获取
- 2023-2028年中国黄酒行业市场预测与投资规划分析报告
热门文章
- 2018 CodeM初赛B轮:D.神奇盘子
- bzoj 3375: [Usaco2004 Mar]Paranoid Cows 发疯的奶牛(二分)
- bzoj 2844: albus就是要第一个出场(线性基)
- matlab2c使用c++实现matlab函数开发配置全解
- Echarts数据可视化echarts实例的相关操作,开发全解+完美注释
- matlab2c使用c++实现matlab函数系列教程-deconv函数
- 图像处理四:霍夫变换
- xilinx sdk用alt+?进行自动补全
- java stream collect_java流stream中的collect()方法详解
- Linux基础-1使用命令帮助