Time Limit: 2000MS　　Memory Limit: 65536K

Description

In an edge-weighted tree, the xor-length of a path p is defined as the xor sum of the weights of edges on p:

$_{xor}length(p) = \bigoplus_{e \in p}w(e)$

$\oplus$ is the xor operator.

We say a path the xor-longest path if it has the largest xor-length. Given an edge-weighted tree with n nodes, can you find the xor-longest path?

Input

The input contains several test cases. The first line of each test case contains an integer n(1<=n<=100000), The following n-1 lines each contains three integers u(0 <= u < n),v(0 <= v < n),w(0 <= w < 2^31), which means there is an edge between node u and v of length w.

Output

For each test case output the xor-length of the xor-longest path.

Sample Input

4
0 1 3
1 2 4
1 3 6


Sample Output

7

Hint

The xor-longest path is 0->1->2, which has length $7 = 3 \oplus 4$

AC代码：

#include<iostream>
#include<cstdio>
#include<cstring>
using namespace std;
const int maxn=1e5+;

int n;

struct Edge{
int u,v,w;
int next;
};
Edge E[*maxn];
void init()
{
ne=;
}
{
++ne;
E[ne].u=u, E[ne].v=v, E[ne].w=w;
}

int d[maxn];
bool vis[maxn];
void dfs(int u)
{
vis[u]=;
{
if(!vis[E[i].v])
{
d[E[i].v]=d[u]^E[i].w;
dfs(E[i].v);
}
}
}

namespace Trie
{
const int SIZE=maxn*;
int sz;
struct TrieNode
{
int ed;
int nxt[];
}trie[SIZE];
void init()
{
sz=;
memset(trie,,sizeof(trie));
}
void insert(int x)
{
int p=;
for(int k=;k>=;k--)
{
int ch=(x>>k)&;
if(trie[p].nxt[ch]==) trie[p].nxt[ch]=++sz;
p=trie[p].nxt[ch];
}
}
int MaxXor(int x)
{
int res=;
int p=;
for(int k=;k>=;k--)
{
int ch=(x>>k)&;
if(trie[p].nxt[ch^])
{
p=trie[p].nxt[ch^];
res|=<<k;
}
else p=trie[p].nxt[ch];
}
return res;
}
};

int main()
{
while(cin>>n)
{
init();
for(int i=,u,v,w;i<n;i++)
{
scanf("%d%d%d",&u,&v,&w);
}

memset(vis,,sizeof(vis));
memset(d,,sizeof(d));
dfs();

Trie::init();
int ans=;
for(int i=;i<=n;i++)
{
Trie::insert(d[i]);
ans=max(ans,Trie::MaxXor(d[i]));
}
cout<<ans<<endl;
}
}

## POJ 3764 - The xor-longest Path - [DFS+字典树变形]的更多相关文章

1. POJ 3764 The xor-longest Path (01字典树)

<题目链接> 题目大意: 给定一颗$n$个节点$(n\leq10^5)$,有边权的树,其边权$(0\leq w < 2^{31})$.让你求出这棵树上任意两个节点之间的异或最大值. ...

2. 题解 bzoj1954【Pku3764 The xor – longest Path】

做该题之前,至少要先会做这道题. 记 $$d[u]$$ 表示 $$1$$ 到 $$u$$ 简单路径的异或和,该数组可以通过一次遍历求得. $$~$$ 考虑 $$u$$ 到 $$v$$ 简单路径的异或和 ...

3. poj 2503 Babelfish(Map、Hash、字典树)

题目链接:http://poj.org/bbs?problem_id=2503 思路分析: 题目数据数据量为10^5, 为查找问题,使用Hash或Map等查找树可以解决,也可以使用字典树查找. 代码( ...

4. CH 1602 - The XOR Largest Pair - [字典树变形]

题目链接:传送门 描述在给定的 $N$ 个整数 $A_1, A_2,\cdots,A_N$ 中选出两个进行xor运算,得到的结果最大是多少? 输入格式第一行一个整数 $N$,第二行 $N$ 个整数 \$ ...

5. LeetCode 14. Longest Common Prefix字典树 trie树 学习之 公共前缀字符串

所有字符串的公共前缀最长字符串 特点:(1)公共所有字符串前缀 (好像跟没说一样...) (2)在字典树中特点:任意从根节点触发遇见第一个分支为止的字符集合即为目标串 参考问题:https://lee ...

6. hdu 1979 DFS + 字典树剪枝

http://acm.hdu.edu.cn/showproblem.php?pid=1979 Fill the blanks Time Limit: 3000/1000 MS (Java/Others ...

7. 2014百度之星资格赛—— Xor Sum（01字典树）

Xor Sum Time Limit: 2000/1000 MS (Java/Others)    Memory Limit: 132768/132768 K (Java/Others) Total ...

8. GCPC 2013_A Boggle DFS+字典树 CSU 1457

上周比赛的题目,由于那个B题被神编译器的优化功能给卡了,就没动过这个题,其实就是个字典树嘛.当然,由于要在Boggle矩阵里得到初始序列,我还一度有点虚,不知道是用BFS还是DFS,最后发现DFS要好 ...

9. nyoj 230/poj 2513 彩色棒 并查集+字典树+欧拉回路

题目链接:http://acm.nyist.net/JudgeOnline/problem.php?pid=230 题意:给你许许多多的木棍,没条木棍两端有两种颜色,问你在将木棍相连时,接触的端点颜色 ...

## 随机推荐

1. Swift 栈和堆

前言 Swift 中的数据类型分为引用类型(类)和值类型(枚举.结构体). 引用类型存储在 "堆" 上,值类型存储在 "栈" 上. Swift 管理引用类型采用 ...

2. 申请IPV6地址配置IPV6域名

0. 前言 最近弄了一下IPV6,虽然不知道什么时候会用到,但是服务器支持IPV6,还是有必要的. 1. 申请IPV6地址 https://tunnelbroker.net/ 到这个网址去注册一个帐号 ...

3. Error:java: invalid source release 无效的源发行版: 8

原因:这是由于jdk的版本与项目的要求不一致造成的,如果是maven项目,首先查看一下pom.xml,以我的项目为例: 从其中可以看出要求的编译插件为1.8版本,而我本机上安装的jdk为1.7版本,因 ...

4. <王二的经济学故事>读书笔记

不是简单地用价格把供需弄平衡就完事了,座位分配给谁同样重要 一个成功的社会必须要有成功的人,必须要给成功的人应得的回报 需求曲线向下倾斜,价格越高需求越少 先来的都是那些时间最不值钱的 无论收入分配差 ...

5. 阿里云 FTP 无法读取目录问题

安全组除了添加制定 FTP端口外 需要加入再添加1024/65535端口 放行策略,ftp被动模式需要随机开一个此范围端口进行传输 添加安全组规则参考文档:https://help.aliyun.co ...

6. Java知多少（61）线程优先级

线程优先级被线程调度用来判定何时每个线程允许运行.理论上,优先级高的线程比优先级低的线程获得更多的CPU时间.实际上,线程获得的CPU时间通常由包括优先级在内的多个因素决定(例如,一个实行多任务处理的 ...

7. Mac zsh切换bash bash切换zsh

切换bash    ————>>>chsh -s /bin/bash 切换zsh      ------->>>chsh -s /bin/zsh

8. [Object Tracking] Overview of Object Tracking

From: 目标跟踪方法的发展概述 From: 目标跟踪领域进展报告 通用目标的跟踪 经典目标跟踪方法 2010 年以前,目标跟踪领域大部分采用一些经典的跟踪方法,比如 Meanshift.Parti ...

9. bootstrap入门基础

1.字体 text-left text-center text-right text-lowercase 小写 text-uppercase 大写 text-capitalize 首字母大写 2.表格 ...

10. ThinkingInJava 学习 之 0000005 访问权限控制

1. 包:库单元 1. 代码组织 2. 创建独一无二的包名 3. 定制工具库 4. 用import改变行为 5. 对使用包的忠告 2. Java访问权限修饰词 1. 包访问权限 2. public : ...