[BZOJ5338][TJOI2018]xor(可持久化Trie)
可持久化Trie模板题。
建两种可持久化Trie,每个点两棵,一棵对DFS求前缀和,一棵对祖先求前缀和。
或者树剖,不好写多少还多个log。
#include<cstdio>
#include<algorithm>
#define rep(i,l,r) for (int i=(l); i<=(r); i++)
#define For(i,x) for (int i=h[x],k; i; i=nxt[i])
using namespace std; const int N=;
int n,u,v,Q,x,y,z,op,nd,tim,cnt,t,a[N],rt1[N],rt2[N],fa[N][];
int h[N],to[N<<],nxt[N<<],L[N],R[N],dep[N],ch[N*][],d[N*]; void add(int u,int v){ to[++cnt]=v; nxt[cnt]=h[u]; h[u]=cnt; } void ins(int &x,int y,int k){
int tmp=++nd; x=tmp;
for (int i=; ~i; i--){
ch[x][]=ch[y][]; ch[x][]=ch[y][]; d[x]=d[y]+;
int t=(k>>i)&; ch[x][t]=++nd; x=ch[x][t]; y=ch[y][t];
}
d[x]=d[y]+; x=tmp;
} int cal1(int x,int y,int k){
int res=;
for (int i=; ~i; i--){
int t=((k>>i)&)^;
if (d[ch[y][t]]-d[ch[x][t]]) res^=<<i,x=ch[x][t],y=ch[y][t];
else x=ch[x][t^],y=ch[y][t^];
}
return res;
} int cal2(int s1,int s2,int s3,int s4,int k){
int res=;
for (int i=; ~i; i--){
int t=((k>>i)&)^;
if (d[ch[s1][t]]+d[ch[s2][t]]-d[ch[s3][t]]-d[ch[s4][t]])
res^=<<i,s1=ch[s1][t],s2=ch[s2][t],s3=ch[s3][t],s4=ch[s4][t];
else s1=ch[s1][t^],s2=ch[s2][t^],s3=ch[s3][t^],s4=ch[s4][t^];
}
return res;
} int Lca(int u,int v){
if (dep[u]<dep[v]) swap(u,v);
int t=dep[u]-dep[v];
for (int i=; ~i; i--) if (t&(<<i)) u=fa[u][i];
if (u==v) return u;
for (int i=; ~i; i--) if (fa[u][i]!=fa[v][i]) u=fa[u][i],v=fa[v][i];
return fa[u][];
} void dfs(int x){
rep(i,,) fa[x][i]=fa[fa[x][i-]][i-];
L[x]=++tim; ins(rt1[tim],rt1[tim-],a[x]);
For(i,x) if ((k=to[i])!=fa[x][])
fa[k][]=x,ins(rt2[k],rt2[x],a[k]),dep[k]=dep[x]+,dfs(k);
R[x]=tim;
} int main(){
freopen("bzoj5338.in","r",stdin);
freopen("bzoj5338.out","w",stdout);
scanf("%d%d",&n,&Q);
rep(i,,n) scanf("%d",&a[i]);
rep(i,,n) scanf("%d%d",&u,&v),add(u,v),add(v,u);
dfs();
while (Q--){
scanf("%d%d%d",&op,&x,&y);
if (op==) printf("%d\n",cal1(rt1[L[x]-],rt1[R[x]],y));
else scanf("%d",&z),t=Lca(x,y),printf("%d\n",cal2(rt2[x],rt2[y],rt2[t],rt2[fa[t][]],z));
}
return ;
}
[BZOJ5338][TJOI2018]xor(可持久化Trie)的更多相关文章
- BZOJ.5338.[TJOI2018]xor(可持久化Trie)
BZOJ LOJ 洛谷 惊了,18年了还有省选出模板题吗= = 做这题就是练模板的,我就知道我忘的差不多了 询问一就用以DFS序为前缀得到的可持久化Trie做,询问二很经典的树上差分. 注意求询问二的 ...
- BZOJ 5338: [TJOI2018]xor 可持久化trie+dfs序
强行把序列问题放树上,好无聊啊~ code: #include <bits/stdc++.h> #define N 200005 #define setIO(s) freopen(s&qu ...
- BZOJ_5338_ [TJOI2018]xor_可持久化trie
BZOJ_5338_ [TJOI2018]xor_可持久化trie Description 有一棵点数为N的树,树边有边权.给你一个在0~N之内的正整数K,你要在这棵树中选择K个点,将其染成黑色,并 ...
- BZOJ5338 [TJOI2018] Xor 【可持久化Trie树】【dfs序】
题目分析: 很无聊的一道题目.首先区间内单点对应异或值的询问容易想到trie树.由于题目在树上进行,case1将路径分成两段,然后dfs的时候顺便可持久化trie树做询问.case2维护dfs序,对d ...
- 可持久化trie(BZOJ5338: [TJOI2018]xor)
题面 BZOJ Sol 显然是要维护一个区域的 \(trie\) 树,然后贪心 区间 \(trie\) 树??? 可持久化 \(trie\) 树??? 直接参考主席树表示出区间的方法建立 \(trie ...
- 【xsy1147】 异或(xor) 可持久化trie
我的脑回路可能比较奇怪. 我们对这些询问离线,将所得序列${a}$的后缀和建$n$棵可持久化$trie$. 对于一组询问$(l,r,x)$,我们在主席树上询问第$l$棵树$-$第r$+1$棵树中与$s ...
- [BZOJ5338][TJOI2018]xor
bzoj luogu descirption 现在有一棵以 \(1\) 为根节点的由 \(n\) 个节点组成的树,树上每个节点上都有一个权值 \(v_i\) .现在有 \(Q\) 次操作,操作如下: ...
- BZOJ5338[TJOI2018]xor——主席树+dfs序
题目描述 现在有一颗以1为根节点的由n个节点组成的树,树上每个节点上都有一个权值vi. 现在有Q 次操作,操作如下: 1 x y 查询节点x的子树中与y异或结果的最大值 2 x y z ...
- [TJOI2018] Xor 异或 (可持久化Trie,树链剖分)
题目描述 现在有一颗以 1 为根节点的由 n 个节点组成的树,树上每个节点上都有一个权值 \(v_i\).现在有 Q 次操作,操作如下: 1 x y :查询节点 x 的子树中与 y 异或结果的最大值. ...
随机推荐
- APScheduler API -- apscheduler.triggers.date
apscheduler.triggers.date API Trigger alias for add_job(): date class apscheduler.triggers.date.Date ...
- node.js、git、bootstrap等安装配置
纯记录 一,安装node.js 1 官方网址 http://nodejs.org/ 点击install 下载node-v0.10.22-x86.msi 2 安装,修改安装目录到d盘,一路next,无 ...
- Android Build.VERSION.SDK_INT兼容介绍
尽管Android向下兼容不好,但是一个程序还是可以在多个平台上跑的.向下兼容不好,接口改变,新的平台上不能用旧的API,旧的平台更不可能用新的API,不等于一个平台需要一个APK.可以在高SDK上开 ...
- Dummynet模拟高时延网络场景(Windows7)
如果安装时出现:my_socket failed 2, cannot talk to kernel module 请查看是否以管理员方式运行,如果是,再判断当前操作系统是否为Win7 64位,如果是, ...
- web性能优化之js图片懒加载
html <div class="container"> <ul> <li> <div id="first" clas ...
- day08作业
1.A.在类中的位置不同 成员变量:在类中方法外 局部变量:在方法定义中或者方法声明上 B.在内存中的位置不同 成员变量:在堆内存(成员变量属于对象,对象进堆内存) 局部变量:在栈内存(局部变量属于方 ...
- 制作macOS10.12系列的系统镜像文件
制作macOS10.12系列的系统镜像文件步骤,过程也比较简单,十来个命令.以10.12.6为例,首先,在苹果商店下载系统安装包APP,或者网上下载后把安装APP复制到 应用程序 文件夹. 然后打 ...
- 安装window系统
安装服务器系统,进入windowpe后将iso中sources,bootmgr,和boot拷贝到C盘,执行bootsect.exe /nt60 c:,调试froad13的consle win8 改 ...
- plsql developer配置
一:今天plsql developer连接 出问题了 ,Oracleclient没正确安装 0.连接vpn 1.环境变量:TNS_ADMIN = D:\worksoftware\oracleClien ...
- caffe细节
1.BN层参数设置 在训练时所有BN层要设置use_global_stats: false(也可以不写,caffe默认是false) 在测试时所有BN层要设置use_global_stats: tru ...