CODEVS1187 Xor最大路径 (Trie树)
由于权值是在边上,所以很容易发现一个性质:d(x,y)=d(x,root) xor d(y,root)。
因为有了这个性质,那么就很好做了。对于每一个点统计到root的距离,记为f 数组。
将f数组里的每个值插进按照二进制位插进字典树里面。
枚举每一个点,然后在字典树中搜索最大的xor值就可以了。
Program CODEVS1187;
const maxn=;
type arr=record
u,v,w,next:int64;
end;
type arr1=record
next:array[..] of longint;
end;
var eg:array[..maxn*] of arr;
last:array[..maxn] of longint;
fa:array[ ..maxn] of longint;
f:array[..maxn] of int64;
T:array[..maxn*] of arr1;
a:array[..] of longint;
n,u,v,w,root,mx,num,m,k,sum,ans,now:int64;
i,j:longint;
procedure add(u,v,w:longint);
begin
inc(j);
eg[j].u:=u;
eg[j].v:=v;
eg[j].w:=w;
eg[j].next:=last[u];
last[u]:=j;
end;
procedure dfs(u:longint;sum:int64;fa:longint);
var i:longint;
begin
f[u]:=sum;
i:=last[u];
while i<> do
begin
if eg[i].v<>fa then
dfs(eg[i].v,sum xor eg[i].w,u);
i:=eg[i].next;
end;
end;
begin
readln(n);
for i:= to n- do
begin
readln(u,v,w);
add(u,v,w);
add(v,u,w);
end;
root:=;
dfs(root,,);
{---------------------------------------------------}
mx:=;
for i:= to n do if f[i]>mx then mx:=f[i];
j:=mx; num:=;
while j> do
begin
inc(num);
j:=j div ;
end;
m:=num; k:=;
for i:= to n do
begin
fillchar(a,sizeof(a),);
j:=f[i]; num:=;
while j> do
begin
inc(num);
a[num]:=j mod ;
j:=j div ;
end;
now:=;
for j:=m downto do
if T[now].next[a[j]]<> then now:=T[now].next[a[j]] else
begin
inc(k);
T[now].next[a[j]]:=k;
now:=k;
end;
end;
ans:=;
for i:= to n do
begin
fillchar(a,sizeof(a),);
j:=f[i]; num:=;
while j> do
begin
inc(num);
a[num]:=j mod ;
j:=j div ;
end;
now:=; sum:=;
for j:=m downto do
if T[now].next[-a[j]]<> then
begin
sum:=sum*+-a[j];
now:=T[now].next[-a[j]];
end
else
begin
sum:=sum*+a[j];
now:=T[now].next[a[j]];
end;
if sum xor f[i]>ans then ans:=sum xor f[i];
end;
writeln(ans);
end.
CODEVS1187 Xor最大路径 (Trie树)的更多相关文章
- HDU 4825 Xor Sum (trie树处理异或)
Xor Sum Time Limit: 2000/1000 MS (Java/Others) Memory Limit: 132768/132768 K (Java/Others)Total S ...
- HDU4825 Xor Sum(贪心+Trie树)
Problem Description Zeus 和 Prometheus 做了一个游戏,Prometheus 给 Zeus 一个集合,集合中包含了N个正整数,随后 Prometheus 将向 Zeu ...
- Xor - Trie树
题目描述 求一棵带边权的树的一条最大 Xor 路径的值.这里的"路径"不一定从根到叶子结点,中间一段路径只要满足条件也可以. 输入格式 第一行,一个整数 N ,表示一颗树有 N 个 ...
- usaco6.1-Cow XOR:trie树
Cow XOR Adrian Vladu -- 2005 Farmer John is stuck with another problem while feeding his cows. All o ...
- BZOJ5338 [TJOI2018] Xor 【可持久化Trie树】【dfs序】
题目分析: 很无聊的一道题目.首先区间内单点对应异或值的询问容易想到trie树.由于题目在树上进行,case1将路径分成两段,然后dfs的时候顺便可持久化trie树做询问.case2维护dfs序,对d ...
- 51nod 1295 XOR key (可持久化Trie树)
1295 XOR key 题目来源: HackerRank 基准时间限制:1.5 秒 空间限制:262144 KB 分值: 160 难度:6级算法题 给出一个长度为N的正整数数组A,再给出Q个查 ...
- 51nod 1295 XOR key | 可持久化Trie树
51nod 1295 XOR key 这也是很久以前就想做的一道板子题了--学了一点可持久化之后我终于会做这道题了! 给出一个长度为N的正整数数组A,再给出Q个查询,每个查询包括3个数,L, R, X ...
- HDU 5269 ZYB loves Xor I Trie树
题目链接: hdu:http://acm.hdu.edu.cn/showproblem.php?pid=5269 bc:http://bestcoder.hdu.edu.cn/contests/con ...
- [TJOI2018] Xor 异或 (可持久化Trie,树链剖分)
题目描述 现在有一颗以 1 为根节点的由 n 个节点组成的树,树上每个节点上都有一个权值 \(v_i\).现在有 Q 次操作,操作如下: 1 x y :查询节点 x 的子树中与 y 异或结果的最大值. ...
随机推荐
- Linux命令补充及基础优化。
1.用户部分 1.1 创建新用户 涉及命令 useradd [root@oldboyedu-50 ~]# useradd oldboy #添加用户 oldboy 1.2 设置密码 [root@oldb ...
- [Apple开发者帐户帮助]八、管理档案(2)创建临时配置文件(iOS,tvOS,watchOS)
创建临时配置文件以在设备上运行您的应用程序而无需Xcode.在开始之前,您需要一个App ID,一个分发证书和多个注册设备. 有关完整的临时配置文件工作流程,请转到Xcode帮助中的分发到已注册设备( ...
- unittest举例
步骤:1.先导入unittest2.编写一个测试类(继承unittest.TestCase)3.编写测试用例类,一个方法就是一条用例4.加载测试用例,有三种方式:加载测试方法,加载测试类,加载测试模块 ...
- CSS怎样改变行内样式(通过外部级联样式表) css !important用法CSS样式使用优先级判断
CSS样式优先级 行内>内部>外部 使用!important的css定义是拥有最高的优先级的.只是在ie6下出了一点小的bug,注意书写方式一般可以轻松避开的. CSS中的!importa ...
- c#异步多线程
1.asyncrel = delegate.BeginInvoke实现委托异步调用. 2.异步等待 asyncrel.IsCompleted用于判断是否执行完毕 or EndInvoke用于等待执行完 ...
- 【转】Java 集合系列10之 HashMap详细介绍(源码解析)和使用示例
概要 这一章,我们对HashMap进行学习.我们先对HashMap有个整体认识,然后再学习它的源码,最后再通过实例来学会使用HashMap.内容包括:第1部分 HashMap介绍第2部分 HashMa ...
- P1968 美元汇率
题目背景 此处省略maxint+1个数 题目描述 在以后的若干天里戴维将学习美元与德国马克的汇率.编写程序帮助戴维何时应买或卖马克或美元,使他从100美元开始,最后能获得最高可能的价值. 输入输出格式 ...
- Python3 每次处理一个字符
""" Python3.4[文本]之每次处理一个字符 """ test_str = "my name is bixiaopeng& ...
- React Native常用组件在Android和IOS上的不同
React Native常用组件在Android和IOS上的不同 一.Text组件在两个平台上的不同表现 1.1 height与fontSize 1.1.1只指定font,不指定height 在这种情 ...
- win32动态库
先讲一个基本的动态库,功能为自定义一个动态库,里面有一个函数MyMessage实现弹出MessageBox. 1. 先在头文件中定义: #ifdef __cplusplus #define EXPOR ...