codeforces840E In a Trap
好巧妙啊,感觉从来没有用过按位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的更多相关文章
- linux shell trap的使用
原文地址:http://blog.sina.com.cn/s/blog_62eb16bb01014dbh.html 一. trap捕捉到信号之后,可以有三种反应方式: (1)执行一段程序来处理这一信号 ...
- Alignment trap 解决方法 【转 结合上一篇
前几天交叉编译crtmpserver到arm9下.编译通过,但是运行的时候,总是提示Alignment trap,但是并不影响程序的运行.这依然很令人不爽,因为不知道是什么原因引起的,这就像一颗定时炸 ...
- ARMLinux下Alignment trap的一些测试 【转自 李迟的专栏 CSDN http://blog.csdn.net/subfate/article/details/7847356
项目中有时会遇到字节对齐的问题,英文为“Alignment trap”,如果直译,意思为“对齐陷阱”,不过这个说法不太好理解,还是直接用英文来表达. ARM平台下一般是4字节对齐,可以参考文后的给出的 ...
- Xcode 自动升级到8.21后坑-Abort trap: 6
pod install or pod update show this message:Generating Pods project Abort trap: 6solve method: udo g ...
- Xcode8 pod install 报错 “Generating Pods project Abort trap
Xcode8 pod install 报错 "Generating Pods project Abort trap 今天在写一个新项目的时候,使用cocoapods在执行 $ pod ins ...
- Erlang ERTS的Trap机制的设计及其用途
出处:http://mryufeng.iteye.com/blog/334744 erlang的trap机制在实现中用的很多,在费时的BIF操作中基本上都可以看到.它的实现需要erl vm的配合.它的 ...
- Windows Internals学习笔记(四)Trap Dispatching
参考资料: 1. <Windows Internals> 知识点: ● 陷阱trap:它是一种处理器机制,用以在某一异常或中断出现时,捕捉该执行线程,并将其控制权转交到操作系统中某一固定位 ...
- trap在shell中捕捉信号
一.trap捕捉到信号之后,可以有三种反应方式:(1)执行一段程序来处理这一信号(2)接受信号的默认操作(3)忽视这一信号 二.trap对上面三种方式提供了三种基本形式:第一种形式的trap命令在sh ...
- trap命令使用
分享一个shell脚本技巧,大家写shell脚本的时候,一般而言仅仅保证功能可用,但程序的鲁棒性却不是太好,不够健壮,多数是脚本处理 一些中断信号导致,应对非预期的系统信号,其实系统自带的trap命令 ...
随机推荐
- tensorflow knn 预测房价 注意有 Min-Max Scaling
示例数据: 0.00632 18.00 2.310 0 0.5380 6.5750 65.20 4.0900 1 296.0 15.30 396.90 4.98 24.00 0.02731 0.00 ...
- L84
Hospital Noise May Disrupt Patient Improvement Many who need restorative rest the most might not be ...
- hadoop集群的安装
Hadoop集群安装 1.配置JDK环境和设置主机名,本地解析 JDK环境教程: http://www.cnblogs.com/wangweiwen/p/6104189.html 本地解析: vim ...
- WC2017 冬眠记
2017年2月3日,为期7天的冬眠营冬令营正式开幕. 前4天我们见到了各种集训队dalao们的华丽身姿 感受到了听课听不懂睡觉又惭愧的无力感 见到了几百号人近一半玩手机,剩下的一半有一半在睡觉,再剩下 ...
- 用WINHEX合并两个或多个BIN文件
以前,我给W25Q16下载内容的时候,每次都要分别传输GBK字符.英文字符和图片BIN文件,每次都要传输好几次. 后来,我发现,用WINHEX软件可以把这些BIN文件都合并到一个文件,只需要传输一次就 ...
- Linux命令总结_文件的输入与 输出
1.echo命令 例子:echo string 解释:echo命令用于显示文本或变量,或者把字符串输入到文件,常用的几个特殊字符有以下几个 \c 不换行 \f 进纸 \t 调格 \n 换行 例子:ec ...
- [poj3107/poj2378]Godfather/Tree Cutting树形dp
题意:求树的重心(删除该点后子树最大的最小) 解题关键:想树的结构,删去某个点后只剩下它的子树和原树-此树所形成的数,然后第一次dp求每个子树的节点个数,第二次dp求解答案即可. 此题一开始一直T,后 ...
- python3.5 使用tkinter 和requests库实现天气图像化显示
1 """ 该python小例子考察使用了tkinter库,requests库 其中: requests库用来发送网络请求 thkinter用来显示图形化界面 请求的天气 ...
- js函数定义参数个数和实际传入参数的对比
因为js是一种弱类型的编程语言,对数据类型的要求没有其他编程语言的要求严格,所以在定义函数的时候不需要像java和C#一样对其传入参数的类型进行定义.那么传入参数的个数有没有影响呢?今天小猪就做了个实 ...
- Laravel框架之CSRF防跨站攻击
laravel框架的csrf防跨站攻击,简单的意思就是说为了防止别人自己写表单非法提交,非法绕过前台的验证,直接将数据往后台执行. 一般的网站如果没有这些安全措施,比较容易被攻击.当然了也还要有其他的 ...