题意:

给你一棵树,求树中最长的xor路径。(n<=100000)

思路:

首先我们知道 A xor B =(A xor C) xor (B xor C)

我们可以随便选一个点DFS 顺便做出与这个点连接的其它点的xor长度

但是

枚举起点&重点+判断会TLE

所以呢 随后 就是重头戏了:trie树

这是一棵神奇的树 (莫名想到了“这是一个神奇的网站”)

我们可以从高位往低位插这个点的xor的值。(数字前面可以补零)

之后是查找 由于异或的性质,我们可以得到:当此位数字不相同时 xor得到的值最大,那不就好说了嘛。

每回寻找树上有没有与这一位不相同的值的节点

1.若有,w|=(1 << i) 。按此方向向下寻找

2.若没有,继续顺着trie树往下走

注意是多case。

注意清空数组,ans、归零什么的

PoPoQQQ大爷在这里都有惨痛的经历。

// by SiriusRen
#include <cstdio>
#include <cstring>
#include <algorithm>
#define N 305000
using namespace std;
int first[N],next[N],v[N],w[N],W[N],trie[N*10][2];
int xx,yy,zz,n,tot,cnt,ans;
bool vis[N];
void add(int x,int y,int z){
v[tot]=y,w[tot]=z;
next[tot]=first[x],first[x]=tot++;
}
void dfs(int x){
for(int i=first[x];~i;i=next[i])
if(!vis[v[i]]){
vis[v[i]]=1;
W[v[i]]=W[x]xor w[i];
dfs(v[i]);
}
}
void insert(int x){
int jy=0;
for(int i=30;i>=0;i--){
int temp=x&(1<<i)?1:0;
if(trie[jy][temp]==0)
trie[jy][temp]=++cnt;
jy=trie[jy][temp];
}
}
int find(int x){
int jy=0,w=0;
for(int i=30;i>=0;i--){
int temp=x&(1<<i)?1:0;
if(trie[jy][!temp])
w|=(1<<i),jy=trie[jy][!temp];
else jy=trie[jy][temp];
}
return w;
}
int main(){
while(~scanf("%d",&n)){
memset(first,-1,sizeof(first));
memset(trie,0,sizeof(trie));
memset(vis,0,sizeof(vis));
memset(W,0,sizeof(W));
ans=tot=cnt=0;
for(int i=1;i<n;i++){
scanf("%d%d%d",&xx,&yy,&zz);
add(xx,yy,zz),add(yy,xx,zz);
}
dfs(xx);
for(int i=0;i<n;i++)insert(W[i]),ans=max(ans,find(W[i]));
printf("%d\n",ans);
}
}



万朵红中一点蓝。

POJ 3764 DFS+trie树的更多相关文章

  1. poj3764(dfs+Trie树+贪心)

    题目链接:http://poj.org/problem?id=3764 分析:好题!武森09年的论文中有道题CowXor,求的是线性结构上的,连续序列的异或最大值,用的办法是先预处理出前n项的异或值, ...

  2. POJ 2418 简单trie树

    Hardwood Species Time Limit: 10000MS Memory Limit: 65536K Total Submissions: 21845 Accepted: 8551 De ...

  3. Colored Sticks POJ - 2513(trie树欧拉路)

    题意: 就是无向图欧拉路 解析: 不能用map..超时 在判断是否只有一个联通的时候,我比较喜欢用set,但也不能用set,会超时,反正不能用stl emm 用trie树来编号就好了 #include ...

  4. POJ - 3764 01字典树+前缀异或和

    异或关于前缀的特性:[u,v]=[1,u]^[1,v] 注意是路径,假设1为根,prexor[1]不保留数值 /*H E A D*/ int to[maxn<<1],nxt[maxn< ...

  5. [POJ] #1002# 487-3279 : 桶排序/字典树(Trie树)/快速排序

    一. 题目 487-3279 Time Limit: 2000MS   Memory Limit: 65536K Total Submissions: 274040   Accepted: 48891 ...

  6. POJ 3764 - The xor-longest Path - [DFS+字典树变形]

    题目链接:http://poj.org/problem?id=3764 Time Limit: 2000MS Memory Limit: 65536K Description In an edge-w ...

  7. POJ 3764 The xor-longest Path trie树解决位运算贪心

    http://poj.org/problem?id=3764 题意 :  一颗树,每个边有个值,在树上找一条简单路径,使得这条路径上的边权异或值最大 先找到所有节点到一点的距离 , 显然dis( x ...

  8. Poj 3764 The xor-longest Path(Trie树+xor+贪心)

    The xor-longest Path Time Limit: 2000MS Memory Limit: 65536K Total Submissions: 6455 Accepted: 1392 ...

  9. poj 3764 The xor-longest Path(字典树)

    题目链接:poj 3764 The xor-longest Path 题目大意:给定一棵树,每条边上有一个权值.找出一条路径,使得路径上权值的亦或和最大. 解题思路:dfs一遍,预处理出每一个节点到根 ...

随机推荐

  1. damn selenium

    Selenium+Python [ˈpaɪθən] 0.Selenium安装 pip install selenium 1.打开了浏览器,后边什么都不干了 需要将浏览器驱动放置在环境变量的目录下. 2 ...

  2. PowerDesigner 逆向工程Non SQL Error : Could not load class com.mysql.jdbc.Driver

    建立与数据库的连接. 在菜单条上,有一个Database的选择项: 选择connect…后弹出设置对话框: 在Data source里选择第三个单选按钮,即Connection profile:后,点 ...

  3. SpringMVC(一) HelloWorld

    学习新东西的的第一个程序--HelloWorld,以下是SpringMVC的HelloWorld 第一步: 用MAVEN 创建webapp,并添加依赖.(强烈建议使用MAVEN,MAVEN学习书籍和视 ...

  4. img标签过滤加fs模块实现图片文件缓存

    方法一:function iCache(selector) { selector.each(function(data) { //msg(data); ! function(data) { var u ...

  5. GDI 设备环境句柄(2)

    WM_PAINT 消息的触发 Windows 程序在以下情况会触发WM_PAINT消息: 窗口被移动导致被遮盖部分暴露出来 用户调整窗口的大小(当窗口类的 style 字段被设置为 CS_HREDRA ...

  6. Orcale-利用闪回恢复数据方法

    一.delete误删 方法1:如果表结构没有改变,直接闪回整个表,具体步骤: --首先需要表闪回权限,开启行移动功能 alter table 表名 enable row movement; --执行闪 ...

  7. Linux进程间通信--进程,信号,管道,消息队列,信号量,共享内存

    Linux进程间通信--进程,信号,管道,消息队列,信号量,共享内存 参考:<linux编程从入门到精通>,<Linux C程序设计大全>,<unix环境高级编程> ...

  8. 面试准备专题——SOA架构

  9. 出现$ref的原因及解决方案

    $ref的产生原因 (1)重复引用:一个集合/对象中的多个元素/属性都引用了同一个对象 (2)循环引用:集合/对象中的多个元素/属性在相互引用导致循环 针对fastjson的处理 fastjson作为 ...

  10. TOMCAT-IDEA远程debug方法

    在很多情况下,tomcat本地启动并不足以完全模拟线上环境,所以,有时候我们可能需要远程debug方法去调试,下面附上远程idea debug方法: IDEA中,选择 Run/Debug Config ...