题意:

有一棵n个节点的树,每个节点都有一个值,m次查询,每次两个数x y表示以x为根的子树中哪个节点权值异或y得出的结果最大,求最大结果

离线

和线段树合并一样,在搜索过程中将多个字典树并在一起

每次查询遍历以当前子树的根为根的字典树

01字典树:http://blog.csdn.net/jaihk662/article/details/53914904

#pragma comment(linker, "/STACK:102400000,102400000")
#include<stdio.h>
#include<vector>
#include<string.h>
#include<stdlib.h>
using namespace std;
typedef struct
{int x;int id;
}Res;
Res temp;
typedef struct Trie
{Trie *next[2];
}Trie;
vector<int> G[100001];
vector<Res> Q[100001];
int val[100001], ans[100001];
Trie *root[100001];
void Update(Trie *q, int a)
{int i, now;Trie *p = q;for(i=29;i>=0;i--){now = 0;if(a&(1<<i))now = 1;if(p->next[now]==NULL){Trie *temp = new Trie;temp->next[0] = temp->next[1] = NULL;p->next[now] = temp;}p = p->next[now];}
}
int Query(Trie *q, int a)
{int i, now, bet;bet = 0;Trie *p = q;for(i=29;i>=0;i--){now = 0;if(a&(1<<i))now = 1;if(p->next[now^1]!=NULL){p = p->next[now^1];bet |= (1<<i);}elsep = p->next[now];}return bet;
}
Trie* Merge(Trie *p, Trie *q)
{if(p==NULL)return q;if(q==NULL)return p;p->next[0] = Merge(p->next[0], q->next[0]);p->next[1] = Merge(p->next[1], q->next[1]);free(q);return p;
}
void Delete(Trie *q)
{int i;if(q->next[0])Delete(q->next[0]);if(q->next[1])Delete(q->next[1]);free(q);
}
void Sech(int u)
{int i, v;root[u] = new Trie;root[u]->next[1] = root[u]->next[0] = NULL;Update(root[u], val[u]);for(i=0;i<G[u].size();i++){v = G[u][i];Sech(v);root[u] = Merge(root[u], root[v]);}for(i=0;i<Q[u].size();i++)ans[Q[u][i].id] = Query(root[u], Q[u][i].x);
}
int main(void)
{int n, q, i, x, y;while(scanf("%d%d", &n, &q)!=EOF){memset(ans, 0, sizeof(ans));for(i=1;i<=n;i++){G[i].clear();Q[i].clear();scanf("%d", &val[i]);}for(i=2;i<=n;i++){scanf("%d", &x);G[x].push_back(i);}for(i=1;i<=q;i++){scanf("%d%d", &y, &x);temp.x = x, temp.id = i;Q[y].push_back(temp);}Sech(1);for(i=1;i<=q;i++)printf("%d\n", ans[i]);Delete(root[1]);}
}

HDU 6191 2017广西邀请赛:Query on A Tree(字典树启发式合并)相关推荐

  1. HDU 6183 2017广西邀请赛:Color it(线段树)

    题目太长了就直接放链接吧 http://acm.hdu.edu.cn/showproblem.php?pid=6183 题意: 一个空的坐标系,有④种操作:①1 x y c表示在(x, y)点染上颜色 ...

  2. HDU 6184 2017广西邀请赛:Counting Stars(三元环)

    题意: n个点m条边的无向图,问有多少个A-structure 其中A-structure满足V=(A,B,C,D) && E=(AB,BC,CD,DA,AC) 可以看出A-struc ...

  3. HDU 6185 2017广西邀请赛:Covering(矩阵快速幂)

    题意: 用1*2的骨牌铺满4*n的矩形总共有多种方法 经典题:可见骨牌铺方格的多种做法 因为宽只有4,考虑先求递推式,假设当前长度为x,有: ①长度为x-1的所有情况后面竖着放2个骨牌,f(x) += ...

  4. HDU 6188 2017广西邀请赛:Duizi and Shunzi

    题意: 有n张牌,每张牌上都有一个不超过n的正整数,你可以选择三张数字连续的牌作为一个顺子,也可以选择两张数字一样的牌作为一个对子,现要让对子和顺子的数量之和尽可能多,求最大数量 先排序 因为对子只消 ...

  5. HDU 6186 2017广西邀请赛:CS Course

    题意: n个数,m次查询,每次给出一个p,求出除了第p个数以外其它所有数的且和,或和,异或和 统计下每个二进制位1的数量,例如z[5] = x表示有x个数第5个二进制位为1 之后每次查询只要check ...

  6. HDU 6182 2017广西邀请赛:A Math Problem

    题意: 给你一个n,问有多少个正整数k满足k^k<=n 暴力枚举,k不会超过15,唯一的坑点就是可能会爆long long #include<stdio.h> #define LL ...

  7. 2017广西邀请赛重现赛

    总题解:http://www.nike0good.com/674.html 1001: 2017ACM/ICPC广西邀请赛-重现赛 1001 A Math Problem #include <i ...

  8. SPOJ 375. Query on a tree (树链剖分)

    题目链接: http://www.spoj.com/problems/QTREE/ 375. Query on a tree Problem code: QTREE You are given a t ...

  9. XXI Open Cup. Grand Prix of Korea I. Query On A Tree 17 树剖 + 二分 + 树带权重心

    传送门 文章目录 题意: 思路: 题意: 给你一棵树,每棵树初始权值都为000,现在给你两个操作: (1)(1)(1)将uuu的子树权值全部加111. (2)(2)(2)将(u,v)(u,v)(u,v ...

最新文章

  1. Rancher 推出 k3OS,业界首个 Kubernetes 操作系统
  2. Linux下多路复用IO接口epoll/select/poll的区别
  3. ont维修使能工具_上海OTC机器人维修保养以及调试服务了解
  4. 【AaronYang风格】第一篇 CodeFirst 初恋
  5. 【机器学习基础】机器学习小抄.pdf(像背托福单词一样理解机器学习)
  6. HALCON示例程序obj_diff.hdev算子obj_diff 的使用
  7. 【2018.4.14】模拟赛之二-ssl2392 蚂蚁【图论】
  8. Flutter InkWell 动画浅析
  9. JAVA wait(), notify(),sleep详解
  10. C/C++[PAT B1009]说反话
  11. 设计模式(八)桥接模式
  12. php爬虫框架下载文件,php爬虫框架怎么安装
  13. 15微型计算机系统不包括,全国2002年10月自学考试计算机应用基础真题
  14. Oracle无法标识锁定数据文件,启动错误ORA-01157: 无法标识/锁定数据文件 解决方案...
  15. python自动生成ppt_用Python自动化生成倒计时图片
  16. 新能源行业商业采购协同系统:赋能新能源行业采购业务,提升产业协同
  17. CefSharp内核浏览器之C#与js的互相调用
  18. 转载_BlueTooth: 蓝牙基带
  19. Springboot+vue项目体用用品销售商城网站
  20. WebRTC重要API和音视频分析

热门文章

  1. python和java的区别-java和python的区别
  2. python自动化办公演示视频-2020年最新Python自动化办公视频教程(2020/9/3)
  3. python从入门到精通需要多久-python学习从入门到精通要多久
  4. 自学python需要安装什么-Python学习需要安装的工具
  5. MongoDB数据库的介绍和连接(非常详细、易懂)
  6. 剑指 Offer II 006. 排序数组中两个数字之和
  7. LeetCode 700 二叉搜索树中的搜索
  8. 最简单的基于DirectShow的示例:视频播放器自定义版
  9. VirtualBox中的虚拟网络环境设置
  10. java中进制转换_java中的进制转换