原题地址:原题戳我


把这题模型转换一下, 对于任意一条路径的异或和,可表示为f(u,v),则f(u,v)=f(1,u)^f(1,v),通过dfs遍历每个点,我们可以预处理f[1]-f[i],复杂度为O(n),所以问题就转化成了在一个数组内,找两个数异或值最大,这样子我们就可以用0/1trie来维护每个数。


同时题目要求我们最后的异或和最大,那我们可以选择从最高位开始进行建trie,然后两数在二进制下的每一位尽量不同,如果实在不行,我们就只能沿着相同的0或1继续寻找,用一种类似贪心的路径选择直接找出答案。


代码如下QWQ:

#include<cctype>
#include<cstdio>
#include<cstring>
#define max(a,b) ((a)>(b)? (a):(b))
using namespace std;
int read()
{int x=0,w=0;char ch=0;while(!isdigit(ch)){w|=ch=='-';ch=getchar();}while(isdigit(ch)){x=(x<<3)+(x<<1)+(ch^'0');ch=getchar();}return w? -x:x;
}
const int N=2e5+10;
struct edge{int v,next,w;
}e[N<<1];
struct Trie_Tree{int next[2];void clear(){memset(next,0,sizeof(next));}
}t[N<<5];
bool vis[N<<5];
int len=-1,linkk[N<<1];
void insert(int u,int v,int w)
{e[++len].next=linkk[u],linkk[u]=len,e[len].v=v,e[len].w=w;e[++len].next=linkk[v],linkk[v]=len,e[len].v=u,e[len].w=w;
}
int n,cnt,ans,val[N<<5];
void reset()
{memset(linkk,-1,sizeof(linkk));memset(vis,0,sizeof(vis));len=-1,cnt=0,ans=0;
}
void dfs(int u,int v)
{val[u]=v,vis[u]=1;for(register int i=linkk[u];~i;i=e[i].next){int to=e[i].v;if(vis[to]) continue;dfs(to,v^e[i].w);}
}
void add_trie(int x)
{int u=0,p=0;for(register int i=30;~i;--i){if(x&(1<<i)) p=1;else p=0;if(!t[u].next[p]){t[u].next[p]=++cnt;t[cnt].clear();}u=t[u].next[p];}
}
int trie(int x)
{int u=0,num=0,p=0;for(register int i=30;~i;--i){if(x&(1<<i)) p=0;else p=1;if(t[u].next[p]) {num|=(1<<i);u=t[u].next[p];}else u=t[u].next[p^1];}return num;
}
int main()
{while(~scanf("%d",&n)){reset();for(register int u,v,w,i=1;i<n;++i){u=read()+1,v=read()+1,w=read();insert(u,v,w);}t[cnt].clear();dfs(1,0);for(int i=1;i<=n;++i){ans=max(ans,trie(val[i]));add_trie(val[i]);}printf("%d\n",ans);}return 0;
}

POJ 3764 The Xor-longest Path 题解相关推荐

  1. POJ 3764 Language: The xor-longest Path (01字典树+DFS)

    传送门:POJ 3764 题目大意: 在树上找一段路径(连续)使得边权相异或的结果最大. 前置技能: 1.用链式前向星建图. 2. 01字典树的应用. 思路: 本题用 vector数组建图是会超时的, ...

  2. Trie:hdu 4825、1251、1247、Poj 3764

    hdu 4825链接 题目意思很简单,就是要求最大异或值的数. 我们可以从二进制的最高位开始选择,不断的排除一些数.我们先假设存在某些数字的二进制数是与当前查找的数不一样的,我们进入这一部分数进行查找 ...

  3. POJ - 3764 The xor-longest Path(字典树性质)

    题目链接:点击查看 题目大意:给出一棵树,每条边上都有一个边权,现在问能否选择两个点,使得其间路径上的异或和最大 题目分析:直接求肯定是比较复杂的,我们可以转换一下题意,因为是一棵树,所以n个点肯定互 ...

  4. 【POJ - 2373】Dividing the Path(单调队列优化dp)

    题干: Farmer John's cows have discovered that the clover growing along the ridge of the hill in his fi ...

  5. 2021牛客国庆集训派对day1 H - Longest Path

    Description 给你一棵树,边有边权, 定义一条从u到v的路径,这一路上经过的点为e1,e2,...,eke_1,e_2,...,e_ke1​,e2​,...,ek​ 定义这条路径的权值f(u ...

  6. CF1304B Longest Palindrome 题解

    description: 给你 nnn 个长度为 mmm 的字符串. 请你判断删去其中的几个(或者不删去),能使得将剩下字符串随意排列所形成的回文串长度最大. 请你输出最大的长度和那个回文串. 1≤n ...

  7. 【Leetcode】2246. Longest Path With Different Adjacent Characters

    题目地址: https://leetcode.com/problems/longest-path-with-different-adjacent-characters/ 给定一棵 n n n个节点的有 ...

  8. 提高篇 第二部分 字符串算法 第3章 Trie字典树

    Trie(字典树)解析及其在编程竞赛中的典型应用举例 - Reqaw - 博客园 『一本通』Trie字典树 - YeLingqi - 博客园 字典树(Trie Tree) - 仰望高端玩家的小清新 - ...

  9. 【读书笔记】《算法竞赛进阶指南》读书笔记——0x10基本数据结构

    to do(perhaps never) CH1401 后缀数组 所有课后题 栈 例题:HDU4699 Editor 维护一个整数序列的编辑器,支持以下五种操作: I x:在当前光标位置处插入一个整数 ...

  10. POJ 1740 A New Stone Game(博弈)题解

    题意:有n个石子堆,每一个都可以轮流做如下操作:选一个石堆,移除至少1个石子,然后可以把这堆石子随便拿几次,随便放到任意的其他石子数不为0的石子堆,也可以不拿.不能操作败. 思路:我们先来证明,如果某 ...

最新文章

  1. JS写的不咋地的碰撞检测
  2. IccFileHandler和IccRecords
  3. python处理数据的优势-Python语言的七大优势
  4. JavaScript之图片的无缝滚动
  5. phoenixcard 获取下载脚本失败,请确认固件版本是否正确
  6. 使用jedis实现Redis消息队列(MQ)的发布(publish)和消息监听(subscribe)
  7. spark.mllib:GradientBoostedTrees
  8. seaborn线性关系数据可视化:时间线图|热图|结构化图表可视化
  9. uni-app第三方登陆-微信
  10. idea代码回滚_IDEA远程仓库版本回滚
  11. java的栈图形演示
  12. 安装MongoDB Install MongoDB on Ubuntu
  13. 漢城博殺的日子 (四)
  14. 整个行业都缺Web前端工程师,你还在问Web前端工作好找吗?
  15. Artifactory安装配置
  16. ConvMF论文解读
  17. hdu.1429.胜利大逃亡(续)(bfs + 0101011110)
  18. aid learning安装应用_Aid Learningapp下载
  19. 阿里云服务器设置安全组最新图文教程 新手必看!
  20. 笔记本win10开启wifi共享wifi

热门文章

  1. stc15单片机c语言 pdf,stc15单片机编程指南.pdf
  2. Module ‘xxx‘ was created for incompatible target arm64-apple-ios9.0 Xcode12 错误解决
  3. 十三号星期五题解 【模拟】
  4. html 画 斜线表头,HTML 斜线 表头
  5. 做毕业论文时遇见的问题
  6. 标准偏差公式c语言,C语言 求标准偏差
  7. 优家益购——JavaWeb项目(Jsp+Servlet+MySQL+tomcat)
  8. Js解决微信浏览器刷新的问题
  9. 对三极管特性曲线的理解
  10. NDK not configured