博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
【BZOJ】1954: Pku3764 The xor-longest Path
阅读量:7207 次
发布时间:2019-06-29

本文共 812 字,大约阅读时间需要 2 分钟。

【算法】trie树+xor路径

【题解】

套路1:统计从根到每个点的xor路径和,由于xor的自反性,两个点到根的xor路径和异或起来就得到两点间路径和。

然后问题就是找到n个值中异或值最大的两个值,考虑枚举每个数字,对于一个数找到与其异或和最大的数。

套路2:对所有数值二进制建01-trie,对于一个已知数字在trie上每一层尽量往另一端走,O(log n)得到与其异或和最大的数。

复杂度O(n log n)。

另一种做法,用两个指针从根往下,尽量分叉走,查询总复杂度O(log n),但是建树仍然需要O(n log n)。

#include
#include
#include
using namespace std;const int maxn=100010;struct edge{
int v,w,from;}e[maxn*2];int t[maxn*33][2],dfsnum=0,cnt=0,tot=0,p[maxn*2],first[maxn],n;bool val[maxn*33];void insert(int u,int v,int w){tot++;e[tot].v=v;e[tot].w=w;e[tot].from=first[u];first[u]=tot;}void push(int x){ int u=0; for(int i=30;i>=0;i--){ bool c=x&(1<
=0;i--){ bool c=x&(1<
View Code

 

转载于:https://www.cnblogs.com/onioncyc/p/7327281.html

你可能感兴趣的文章
基础权限管理
查看>>
navicat for mysql快捷键
查看>>
PHP中设置时区方法小结
查看>>
netty源码分析
查看>>
linux-2.6内核驱动学习——jz2440之输入子系统
查看>>
Sizeof与Strlen的区别与联系
查看>>
Hadoop- NameNode和Secondary NameNode元数据管理机制
查看>>
python中socket模块详解
查看>>
Android 四大组件 (三) BroadcastReceiver 介绍
查看>>
一个友盟BUG的思考和分析:Invalid update
查看>>
读取对象
查看>>
切换带空格的目录下
查看>>
Nginx 在ubuntu14.04下的安装
查看>>
51nod 1100:斜率最大
查看>>
简单工厂模式(C++)
查看>>
关于Java中的Arrays.copyOfRange()方法
查看>>
正确地黑C
查看>>
一个程序员的自白(三十而立)
查看>>
生产者、消费者、队列
查看>>
关于java中的==,equal,new,= 的一些相关知识(有点乱)
查看>>