POJ 3769 浅谈TRIE树贪心

这里写图片描述
世界真的很大
字典树也是个厉害东西,一般听说trie树的地方都是ac自动机什么的
但是基于trie自己的神奇性质,在一些特别的问题上也有独特的应用
XOR,即异或运算就是一类这样的特别的问题
看题先:
description:

给出一棵树,树上有边权,问在树上选择任意两点之间,路径异或和最大

input

多组数据,每组数据给出一个整数n,接下来n-1行,每行包含3个整数u,v,w,表示u和v之间有一条边权为w的边

output

每组数据一个输出,表示最大边权异或和

在考虑异或和最大之前首先考虑怎么处理树上路径的异或和
由于是树,路径肯定是唯一的
如果只是求路径和的话,肯定是考虑记录每个点到根节点的路径和,u到v的路径和就是u到根节点的和加上v到根节点的和在减去两倍lca(u,v)到根节点的路径和,这也是处理树上两点路径问题的一个常用套路了
类比到异或上,由于是位运算,必然有其独特的性质,和简单的加法不一样的
异或的其中一个性质在于,如果两个相同的数异或起来,其结果为0,而任何数异或0都是其本身
而考虑u到根节点的异或和,和v到根节点的异或和异或起来,从lca(u,v)到根节点的部分是重复的,正好抵消掉
所以路径u,到v路径边权异或和,就是u到根节点异或上v到根节点
而我们可以预处理每个点到根节点路径的异或和
所以问题就转化成了在一堆数里面选异或和最大的2个数
终于谈到trie树了。。。
先简化问题,对于单独的一个数,在其他所有数里面选一个数与其异

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值