HDU 4757 Tree(可持久化trie)
题目链接:http://acm.hdu.edu.cn/showproblem.php?pid=4757
题意:给出一棵树,节点有权值。每次询问x到y的路径上与z抑或的最大值。
思路:可持久化trie。
struct Node
{
int c[2],cnt;
};
Node a[2000005];
int cnt;
int newNode()
{
cnt++;
a[cnt].c[0]=a[cnt].c[1]=a[cnt].cnt=0;
return cnt;
}
struct node
{
int v,next;
};
node edges[N<<1];
int head[N],e;
void add(int u,int v)
{
edges[e].v=v;
edges[e].next=head[u];
head[u]=e++;
}
int n,m,f[N][20],d[N],dep[N],root[N];
void insert(int u,int p,int d)
{
int x=root[u],y=root[p],i,k;
for(i=15;i>=0;i--)
{
k=(d>>i)&1;
a[x].c[k]=newNode();
a[x].c[!k]=a[y].c[!k];
a[a[x].c[k]].cnt=a[a[y].c[k]].cnt+1;
x=a[x].c[k];
y=a[y].c[k];
}
}
void DFS(int u,int pre)
{
f[u][0]=pre; dep[u]=dep[pre]+1;
root[u]=newNode();
insert(u,pre,d[u]);
int i,v;
for(i=head[u];i!=-1;i=edges[i].next)
{
v=edges[i].v;
if(v==pre) continue;
DFS(v,u);
}
}
int getLca(int x,int y)
{
if(dep[x]>dep[y]) swap(x,y);
int i,k=dep[y]-dep[x];
FOR0(i,16) if(k&(1<<i)) y=f[y][i];
if(x==y) return x;
for(i=16;i>=0;i--)
{
if(f[x][i]&&f[y][i]&&f[x][i]!=f[y][i])
{
x=f[x][i];
y=f[y][i];
}
}
return f[x][0];
}
int cal(int x,int y,int z,int val)
{
int i,k,ans=0,t=f[z][0];
x=root[x];
y=root[y];
z=root[z];
t=root[t];
for(i=15;i>=0;i--)
{
k=!((val>>i)&1);
int xx=a[x].c[k];
int yy=a[y].c[k];
int zz=a[z].c[k];
int tt=a[t].c[k];
if(a[xx].cnt+a[yy].cnt-a[zz].cnt-a[tt].cnt>0) ans|=1<<i;
else k=!k;
x=a[x].c[k];
y=a[y].c[k];
z=a[z].c[k];
t=a[t].c[k];
}
return ans;
}
int main()
{
while(scanf("%d%d",&n,&m)!=-1)
{
int i;
FOR1(i,n) RD(d[i]),head[i]=-1;
cnt=0; e=0;
FOR1(i,n-1)
{
int u,v;
RD(u,v);
add(u,v); add(v,u);
}
clr(f,0);
DFS(1,0);
int j;
for(i=1;i<=16;i++) FOR1(j,n)
{
f[j][i]=f[f[j][i-1]][i-1];
}
while(m--)
{
int x,y,z;
RD(x,y,z);
PR(cal(x,y,getLca(x,y),z));
}
}
}
HDU 4757 Tree(可持久化trie)的更多相关文章
- HDU.4757.Tree(可持久化Trie)
题目链接 \(Description\) 给定一棵树,点有点权.\(Q\)次询问\(x,y,z\),求\(x\)到\(y\)的简单路径中,与\(z\)异或能得到的最大的数是多少. \(Solution ...
- HDU 4757 Tree 可持久化字典树 trie
http://acm.hdu.edu.cn/showproblem.php?pid=4757 给出一棵树,每个节点有权值,每次查询节点 (u,v) 以及 val,问 u 到 v 路径上的某个节点与 v ...
- HDU 4757 Tree 可持久化字典树
Tree Time Limit: 20 Sec Memory Limit: 256 MB 题目连接 http://acm.hdu.edu.cn/showproblem.php?pid=4757 Des ...
- HDU 4757 Tree(可持久化Trie+Tarjan离线LCA)
Tree Time Limit: 10000/5000 MS (Java/Others) Memory Limit: 102400/102400 K (Java/Others) Total Su ...
- HDU 4757 Tree
传送门 Tree Time Limit: 10000/5000 MS (Java/Others) Memory Limit: 102400/102400 K (Java/Others) Prob ...
- HDU 4757 Tree(可持久化字典树)(2013 ACM/ICPC Asia Regional Nanjing Online)
Problem Description Zero and One are good friends who always have fun with each other. This time, ...
- HDU4757 Tree(可持久化Trie)
写过可持久化线段树,但是从来没写过可持久化的Trie,今天补一补. 题目就是典型的给你一个数x,和一个数集,问x和里面的某个数xor起来的最大值是多少. 最原始的是数集是固定的,只需要对数集按照高到低 ...
- HDU 4757 Tree(可持续化字典树,lca)
题意:询问树上结点x到结点y路上上的权值异或z的最大值. 任意结点权值 ≤ 2^16,可以想到用字典树. 但是因为是询问某条路径上的字典树,将字典树可持续化,字典树上的结点保存在这条路径上的二进制数. ...
- 可持久化Trie模板
如果你了解过 01 Trie 和 可持久化线段树(例如 : 主席树 ).那么就比较好去可持久化 Trie 可持久化 Trie 当 01 Trie 用的时候能很方便解决一些原本 01 Trie 不能解决 ...
随机推荐
- BZOJ2752: [HAOI2012]高速公路(road)
2752: [HAOI2012]高速公路(road) Time Limit: 20 Sec Memory Limit: 128 MBSubmit: 608 Solved: 199[Submit][ ...
- [工作积累] android 中添加libssl和libcurl
1. libssl https://github.com/guardianproject/openssl-android 然后执行ndk-build 2.libcurl 源代码组织结构, 下面的mak ...
- LUCAS 定理
原来一张图就就能证明:C(N,M)%P,p是素数. 简直太炫酷 先膜拜会 #include<iostream>#include<cstdio>#include<ctime ...
- git shell 中文
alias ls="ls --show-control-chars" alias ll="ls -l"
- mapred和mapreduce
总体上看,Hadoop MapReduce分为两部分:一部分是org.apache.hadoop.mapred.*,这里面主要包含旧的API接口以及MapReduce各个服务(JobTracker以及 ...
- PHP扩展迁移为兼容PHP7记录
PHP7扩展编写的时候,提供的一些内核方法和之前的PHP之前的版本并不能完全兼容.有不少方法参数做了调整.下面是在迁移过程中遇到的一些问题.记录下来,避免大家再踩坑. PHP7扩展开发之hello w ...
- 图解JavaScript执行环境结构
JavaScript引擎在开始编译代码的时候,会对JavaScript代码进行一次预编译,生成一个执行环境,比如如下代码: window.onload=function(){ function sub ...
- mysql 事务提交过程
打开binlog选项后,执行事务提交命令时,就会进入两阶段提交模式.两阶段提交分为prepare阶段和commit两个阶段.流程如下 :这里面涉及到两个重要的参数:innodb_flush_log_ ...
- POJ 2566
Bound Found Time Limit: 5000MS Memory Limit: 65536K Total Submissions: 1445 Accepted: 487 Spec ...
- tomcat 跨域
http://www.360doc.com/content/14/0920/14/7909375_411017244.shtml http://www.tuicool.com/articles/Znq ...