好巧妙啊,感觉从来没有用过按位dp的trick,也没有用过树上链分块的trick

挂个,全程看他的思路写的,当然lych帮我理解了最难懂的一部分

首先这里有个玄学的分块

每个点统计它上面256(其实差不多就是n^0.5)个点的情况

但是发现不同的块需要不同的处理,因为不同的块在第9位及以上的位会产生影响

所以对于每个点都需要预处理出Fi,也就是当这个块是统计答案时的第i个块时的最大答案

那么在跳的时候只要疯狂的跳256,同时记录下当前这一块已经是统计的第几块,最后不到256个暴力判一下

然而

暴力预处理是n*(256)^2≈n^2的

gg

于是可以用一个类似dp的方法做出来

首先把每一个答案找一个最好的地方放好(就是块内的每一个点所对应的答案找一个i使答案的9~16位为11111111)

接下来就一定是这些答案通过与下标同异或一个东西所得到的答案了

先枚举位,考虑这些dp值在这一位取反对答案的贡献

没了(感性理解是对的)

 #include <bits/stdc++.h>
#define KUAI 256
#define LOG 8
#define FULL 255
using namespace std;
int n,m,E,x,y;
int dep[],fa[],Fa[],ans[][],a[],fir[],nex[],to[];
void add(int x,int y)
{
nex[++E]=fir[x];fir[x]=E;to[E]=y;
}
void build(int now,int fat)
{
if(now==)
int e=;
dep[now]=dep[fat]+;
fa[now]=fat;
for(int i=,x=now;i<=KUAI && x;i++,x=fa[x])
if(i==KUAI)
Fa[now]=x;
else
{
int y=a[x]^i;//当前答案
ans[now][FULL^(y>>LOG)]=max(ans[now][FULL^(y>>LOG)],y|(FULL<<LOG));//在最好的地方放好
}
for(int i=;i<LOG;i++)
for(int j=;j<KUAI;j++)
if(ans[now][j]==)
if(ans[now][j^(<<i)])
ans[now][j]=ans[now][j^(<<i)]^(<<(LOG+i));
for(int i=fir[now];i;i=nex[i])
if(to[i]!=fa[now])
build(to[i],now);
}
int main()
{
scanf("%d%d",&n,&m);
for(int i=;i<=n;i++)
scanf("%d",&a[i]);
for(int i=;i<n;i++)
scanf("%d%d",&x,&y),
add(x,y),add(y,x);
build(,);
for(int i=;i<=m;i++)
{
scanf("%d%d",&x,&y);
if(i==)
int e=;
swap(x,y);
int ret=a[y]^(dep[x]-dep[y]),j=,de=;
for(;dep[x]-dep[y]>=KUAI;j++,de+=KUAI)
ret=max(ret,ans[x][j]),x=Fa[x];
for(;x!=y;x=fa[x],de++)
ret=max(ret,a[x]^de);
printf("%d\n",ret);
}
return ;
}

codeforces840E In a Trap的更多相关文章

  1. linux shell trap的使用

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

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

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

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

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

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

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

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

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

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

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

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

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

  8. trap在shell中捕捉信号

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

  9. trap命令使用

    分享一个shell脚本技巧,大家写shell脚本的时候,一般而言仅仅保证功能可用,但程序的鲁棒性却不是太好,不够健壮,多数是脚本处理 一些中断信号导致,应对非预期的系统信号,其实系统自带的trap命令 ...

随机推荐

  1. 创建一个HTML5与JQuery结合的幻灯片

    1. [代码][JavaScript]代码 $(window).load(function(){    //我们监听了 window.load 事件,因此我们确定幻灯片上的所有图片都能够正确进行加载. ...

  2. 分享知识-快乐自己:java 中的访问修饰符

    1):Java中的访问修饰符: Java面向对象的基本思想之一是封装细节并且公开接口.Java语言采用访问控制修饰符来控制类及类的方法和变量的访问权限,从而向使用者暴露接口,但隐藏实现细节. 访问控制 ...

  3. windows与Linux操作系统的差别

    用户需要记住:Linux和Windows在设计上就存在哲学性的区别.Windows操作系统 倾向于将更多的功能集成到操作系统内部,并将程序与内核相结合:而Linux不同 于Windows,它的内核空间 ...

  4. Linux下Fork与Exec

    一.引言 对于没有接触过Unix/Linux操作系统的人来说,fork是最难理解的概念之一:它执行一次却返回两个值.fork函数是Unix系统最杰出的成就之一,它是七十年代UNIX早期的开发者经过长期 ...

  5. MySQL 数据底部出现总计字样 第二种办法 纵向合并 20161103

    上次在博客http://www.cnblogs.com/Mr-Cxy/p/5923375.html 我们使用了group by with rollup 函数 field自定义排序 来实现添加底部总计字 ...

  6. BZOJ1500:[NOI2005]维修数列

    浅谈\(splay\):https://www.cnblogs.com/AKMer/p/9979592.html 浅谈\(fhq\)_\(treap\):https://www.cnblogs.com ...

  7. DataGrid当列宽超出当前宽度时,没有数据也恒有滚动条

    附件是DataGrid支持滚动条的文件. 具体使用如下: 1)DataGrid使用控件模板 <Setter Property="Template" Value="{ ...

  8. Scala学习——操作符(初)

    经常看到却反应不出来的(->) val a = 2 val b = a->4 //表示生成一个tuple println(b._1+" "b._2) //2 4

  9. python3中,pycharm中怎么连接数据库

    因为python3现在还不能直接连接数据库,所有如果想连接,就只能通过以下方法: 在APP中的,__init__.py中,添加以下代码就可以: import pymysql pymysql.insta ...

  10. java.lang.NoClassDefFoundError: org/springframework/dao/support/DaoSupport

    转自:https://blog.csdn.net/lzx159951/article/details/79753493 1. 缺少:org.springframework.transaction-3. ...