好巧妙啊,感觉从来没有用过按位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. JavaScript多态

    function Master(){ //给动物喂食 this.feed=function(animal,food){ window.alert(animal.constructor); docume ...

  2. linux 进程学习笔记-进程退出/终止进程

    <!--[if !supportLists]-->Ÿ <!--[endif]-->退出/终止进程 void _exit(int status) 与 void exit(int ...

  3. AtCoder Grand Contest #026 A - Colorful Slimes 2

    Time Limit: 2 sec / Memory Limit: 1024 MB Score : 200200 points Problem Statement Takahashi lives in ...

  4. ACM学习历程——HDU4814 Golden Radio Base(数学递推) (12年成都区域赛)

    Description Golden ratio base (GRB) is a non-integer positional numeral system that uses the golden ...

  5. 【Lintcode】076.Longest Increasing Subsequence

    题目: Given a sequence of integers, find the longest increasing subsequence (LIS). You code should ret ...

  6. Python3解leetcode Maximum SubarrayClimbing Stairs

    问题: You are climbing a stair case. It takes n steps to reach to the top. Each time you can either cl ...

  7. webAPP meta 标签大全

    1.先说说mate标签里的viewport: viewport即可视区域,对于桌面浏览器而言,viewport指的就是除去所有工具栏.状态栏.滚动条等等之后用于看网页的区域.对于传统WEB页面来说,9 ...

  8. SQL 排序规则 CodeProject

    http://www.cnblogs.com/ifreesoft/p/4259626.html 开发ERP数据维护工具之一 修改SQL Server数据库排序规则 Change Collation   ...

  9. java 通过System.getProperties()获取系统参数

    转自:https://www.cnblogs.com/ksuifeng/archive/2010/09/25/1834416.html 1.java的System.getProperty()方法可以获 ...

  10. Oracle数据去重

    一.完全重复数据去重方法    具体思路是,首先创建一个临时表,然后将DISTINCT之后的表数据插入到这个临时表中;然后清空原表数据;再讲临时表中的数据插入到原表中;最后删除临时表. 对于表中完全重 ...