题意:给你一棵节点带权树。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. CSS入门基础学习一

    一.CSS样式 1.什么是CSS: CSS是指层叠样式表(Cascading Style Sheels),CSS通常为CSS样式表或层叠样式表,主要用于设置HTML文本内容,以及版本面的布局等 2.H ...

  2. [CSP-S模拟测试]:不等式(数学)

    题目描述 小$z$热衷于数学.今天数学课的内容是解不等式:$L\leqslant S\times x\leqslant R$.小$z$心想这也太简单了,不禁陷入了深深的思考:假如已知$L,R,S,M$ ...

  3. save change is not permitted

    https://support.microsoft.com/en-my/help/956176/error-message-when-you-try-to-save-a-table-in-sql-se ...

  4. 移动端rem布局屏幕适配插件(放js中便可使用)

    /* doc:不用管:document对象 win:不用管:window对象 design:注意:设计稿的尺寸/物理像素*/ (function (doc, win,design) {// alert ...

  5. Linux_Bash常用脚本

    目录 目录 从用户列表中过滤用户名并创建用户 awktrcut 指令的文本处理 tr指令 cut指令 awk指令 备份文件 测试LFTPServer权限设定 开启Httpd 安装Httpd 批量创建用 ...

  6. Vagrant 手册之同步目录 - 基本用法

    原文地址 - 概述 原文地址 - 基本用法 同步目录 Synced folder 支持在宿主机和客户机之间共享目录,从而允许你在宿主机的项目文件上工作,但是可以在客户机上编译并运行. 默认情况下,Va ...

  7. Python笔记(十六)_else语句、with语句

    else的多种用法 1.try except + else:检测到代码无异常,才执行else 例如: def func(num): count=num//2 while count>1: if ...

  8. 2019 最新 Java 核心技术教程,都在这了!

    Java技术栈 www.javastack.cn 优秀的Java技术公众号 以下是Java技术栈微信公众号发布的所有关于 Java 的技术干货,会从以下几个方面汇总,本文会长期更新. Java 基础篇 ...

  9. poi小案例

    一:pom <?xml version="1.0" encoding="UTF-8"?> <project xmlns="http: ...

  10. 洛谷 P3374 【模板】树状数组 1(单点加,区间和)

    题目链接 https://www.luogu.org/problemnew/show/P3374 树状数组 树状数组最基本的就是求区间和. 维护: 空间复杂度:O(n) 时间复杂度(区间和,单点修改) ...