题意:给你一棵节点带权树。q个询问,每次询问u到v的路径上max(a[i]^dis(i,v))?

保证u是v的祖先,i是u->v路径上的点。n,ai<=5e4。

标程:

 #include<bits/stdc++.h>
using namespace std;
int read()
{
int x=,f=;char ch=getchar();
while (ch<''||ch>'') {if (ch=='-') f=-;ch=getchar();}
while (ch>=''&&ch<='') x=(x<<)+(x<<)+ch-'',ch=getchar();
return x*f;
}
const int N=;
int cnt,n,q,u,v,a[N],dep[N],head[N],fa[N],sc,son[][],t,c,now,sum,f[N][],jp[N],ans,base;
struct node{int to,next;}num[N*];
void add(int x,int y)
{num[++cnt].to=y;num[cnt].next=head[x];head[x]=cnt;}
void dfs(int x)
{
for (int i=head[x];i;i=num[i].next)
if (num[i].to!=fa[x]) {
dep[num[i].to]=dep[x]+;
fa[num[i].to]=x;
dfs(num[i].to);
}
}
int main()
{
n=read();q=read();
for (int i=;i<=n;i++) a[i]=read();
for (int i=;i<n;i++) u=read(),v=read(),add(u,v),add(v,u);
dfs();
for (int i=;i<=n;i++)
if (dep[i]>=)
{
int x=i;sc=;son[][]=son[][]=;
for (int j=;j<;j++,x=fa[x])//add_Trie
{
t=a[x]^j;now=;
for (int k=;k>=;k--)
{
c=(t>>k)&;
if (!son[now][c]) son[now][c]=++sc,son[sc][]=son[sc][]=;
now=son[now][c];
}
}
for (int j=;j<;j++)
{
t=j<<;now=sum=;
for (int k=;k>=;k--)
{
c=(t>>k)&;
if (son[now][c^]) now=son[now][c^],sum+=(<<k);else now=son[now][c];
}
f[i][j]=sum;
}
jp[i]=x;
}
while (q--)
{
u=read();v=read();ans=base=;
for (;dep[v]-dep[u]>=;v=jp[v]) ans=max(ans,f[v][base]),base++;
for (base=base*;v!=fa[u];v=fa[v],base++) ans=max(ans,a[v]^base);
printf("%d\n",ans);
}
return ;
}

题解:分块+Trie

异或性质:比如需要异或x,那么^(x&255)^((x>>8)<<8)等价。拆数异或值不变。

对于每个点到根的链,每256个分一个块。

每个点x保存f[x][i]表示从x以上256个点的块中max(a[j]^dis(x,j)^(i<<8))。容易用字典树处理出所有i的最大异或值。

查询的时候按照块跳。统计max(f[v][base]),每次base++。

时间复杂度O(q*256+n*256*logn)。

CF840E In a Trap的更多相关文章

  1. 【CF840E】In a Trap 分块

    [CF840E]In a Trap 题意:一棵n个点的树,第i个点权值为ai,q次询问,每次给定u,v(u是v的祖先),求对于所有在u-v上的点i,$a_i\ \mathrm{xor}\ dis(i, ...

  2. linux shell trap的使用

    原文地址:http://blog.sina.com.cn/s/blog_62eb16bb01014dbh.html 一. trap捕捉到信号之后,可以有三种反应方式: (1)执行一段程序来处理这一信号 ...

  3. Alignment trap 解决方法  【转 结合上一篇

    前几天交叉编译crtmpserver到arm9下.编译通过,但是运行的时候,总是提示Alignment trap,但是并不影响程序的运行.这依然很令人不爽,因为不知道是什么原因引起的,这就像一颗定时炸 ...

  4. ARMLinux下Alignment trap的一些测试 【转自 李迟的专栏 CSDN http://blog.csdn.net/subfate/article/details/7847356

    项目中有时会遇到字节对齐的问题,英文为“Alignment trap”,如果直译,意思为“对齐陷阱”,不过这个说法不太好理解,还是直接用英文来表达. ARM平台下一般是4字节对齐,可以参考文后的给出的 ...

  5. Xcode 自动升级到8.21后坑-Abort trap: 6

    pod install or pod update show this message:Generating Pods project Abort trap: 6solve method: udo g ...

  6. Xcode8 pod install 报错 “Generating Pods project Abort trap

    Xcode8 pod install 报错 "Generating Pods project Abort trap 今天在写一个新项目的时候,使用cocoapods在执行 $ pod ins ...

  7. Erlang ERTS的Trap机制的设计及其用途

    出处:http://mryufeng.iteye.com/blog/334744 erlang的trap机制在实现中用的很多,在费时的BIF操作中基本上都可以看到.它的实现需要erl vm的配合.它的 ...

  8. Windows Internals学习笔记(四)Trap Dispatching

    参考资料: 1. <Windows Internals> 知识点: ● 陷阱trap:它是一种处理器机制,用以在某一异常或中断出现时,捕捉该执行线程,并将其控制权转交到操作系统中某一固定位 ...

  9. trap在shell中捕捉信号

    一.trap捕捉到信号之后,可以有三种反应方式:(1)执行一段程序来处理这一信号(2)接受信号的默认操作(3)忽视这一信号 二.trap对上面三种方式提供了三种基本形式:第一种形式的trap命令在sh ...

随机推荐

  1. yum源更换

    折腾了半天,怀疑自己能力 的时候,发现原来不是我的错.树莓派换源国内的aliyun,163都不能用,最好找到这个 # CentOS-Base.repo # # The mirror system us ...

  2. linux命令学习记录

    1.查看目录和文件大小 du -sh ./* du -sh * | sort -nr 这个排序不正常都是因为-h参数的原因 du -s * | sort -nr | head 选出排在前面的10个 d ...

  3. windows下使用Ant编译Android项目

    1. 安装ant,配置环境变量 2. 执行命令: android update project -p 项目路径 例:android update project -p D:\project\UI_de ...

  4. Win10真正好用之处

    第一步.  关闭无用服务 刚装好Win10的时候,整部电脑响应很慢,有时什么都不做,硬盘灯也能狂闪半天.很明显,这是微软爸爸默认开启的服务未被及时关闭所致. 网上有很多文章指导新手如何关闭系统服务,但 ...

  5. pytest相关问题解析

    1. 如果你想查询在你的环境下有哪些pytest的active plugin可以使用: py.test --traceconfig 会得到一个扩展的头文件名显示激活的插件和他们的名字.同时也会打印出当 ...

  6. (转)Python3 zip() 函数

    转:http://www.runoob.com/python3/python3-func-zip.html 描述 zip() 函数用于将可迭代的对象作为参数,将对象中对应的元素打包成一个个元组,然后返 ...

  7. 2017工业软件top100

  8. Note:目录2

    ylbtech-Note:目录2 1.返回顶部   2.返回顶部   3.返回顶部   4.返回顶部   5.返回顶部     6.返回顶部   作者:ylbtech出处:http://ylbtech ...

  9. CompletionService的好处与使用场景

    转自:https://blog.csdn.net/jdsjlzx/article/details/52912701 FutureTask既是Future.Runnable,又是包装了Callable( ...

  10. vue 数组中嵌套的对象添加新属性--页面更新

    vue 数组中嵌套的对象添加新属性--页面更新:https://www.jianshu.com/p/8f0e5bb13735