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 不能解决 ...
随机推荐
- hdu 4858 项目管理 图的分块
题目链接:http://acm.hdu.edu.cn/showproblem.php?pid=4858 我们建造了一个大项目!这个项目有n个节点,用很多边连接起来,并且这个项目是连通的!两个节点间可能 ...
- Poj 1050 分类: Translation Mode 2014-04-04 09:31 103人阅读 评论(0) 收藏
To the Max Time Limit: 1000MS Memory Limit: 10000K Total Submissions: 39058 Accepted: 20629 Desc ...
- ios 流媒体 资料
(1)“Real-Time Streaming Protocol (RTSP)”比较官方的资料(链接). (2)“ffmpeg”在百度百科的简介(链接). (3)“ffmpeg”的官网:http:// ...
- DepthClipEnable error
刚刚呢又遇到这种鬼扯的问题,ps就return个(1,1,0,1) nisight的汇编都写对了,但结果就是画不出任何东西,按照经验,必然是某个state.... 我就找啊找啊,被我找到一个 Rast ...
- VS开发工具 不会在异常的地方停止的问题.
启用"仅我的代码"
- FormCreate & FormActivate & FormShow执行顺序演示
procedure TForm1.FormCreate(Sender: TObject);begin form1.Caption:=form1.Caption +'+Create'; end; pr ...
- ios 判断空字符串
- (BOOL) isBlankString:(NSString *)string { if (string == nil || string == NULL) { return YES; } if ...
- JDK各个版本下载页面
http://www.oracle.com/technetwork/java/javase/downloads/java-archive-downloads-javase7-521261.html 需 ...
- iOS数组和字符串的转化
NSMutableArray *components = [messageStr componentsSeparatedByString:@"*"] ; 反过来为 NSStrig ...
- tomcat 跨域
http://www.360doc.com/content/14/0920/14/7909375_411017244.shtml http://www.tuicool.com/articles/Znq ...