HDU 6191 Query on A Tree ( 2017广西邀请赛 && 可持久化Trie )
题意 : 给你一棵树、树上的每个点都有点权、之后有若干次问询、每次问询给出一个节点编号以及一个整数 X 、问你以给出节点为根的子树中哪个节点和 X 异或最大、输出这个值
分析 :
看到这种树上异或最值的问题
可以考虑使用 Trie 来解决
首先涉及到子树
我们可以利用 DFS 序来构造出每个根的子树
DFS 序有很好的性质、其子树的所有节点必定是序列中连续的一段
那么我们就可以对这个 DFS 序列建立可持久化 Trie
然后通过类似前缀和减法的方式得到问询节点子树表示的区间中
所有数组成的 Trie 、然后通过贪心的方法来得到最大异或值
#include<bits/stdc++.h> using namespace std; ; ); int root[maxn]; int sz[maxNode]; ]; ; int newNode() { totNode++; memset(ch[totNode], , sizeof(ch[totNode])); sz[totNode] = ; return totNode; } inline void Insert(int F, int C, int val) { F = root[F], C = root[C]; ; i>=; i--){ ; if(!ch[C][bit]){ ch[C][bit] = newNode(); ch[C][!bit] = ch[F][!bit]; sz[ ch[C][bit] ] = sz[ ch[F][bit] ]; } C = ch[C][bit], F = ch[F][bit]; sz[C]++; } } int Query(int x, int y, int val) { ; ; i>=; i--){ ; ) ret += (<<i), y = ch[y][!c], x = ch[x][!c]; else x = ch[x][c], y = ch[y][c]; } return ret; } struct EDGE{ int v, w, nxt; }Edge[maxn]; ; int weight[maxn]; inline void Edge_init(int n) { memset(sz, , sizeof(sz)); memset(ch, , sizeof(ch)); memset(Head, -, sizeof(Head)); EdgeCnt = ; } inline void AddEdge(int From, int To, int Weight) { Edge[EdgeCnt].v = To; Edge[EdgeCnt].w = Weight; Edge[EdgeCnt].nxt = Head[From]; Head[From] = EdgeCnt++; } ; int st[maxn], en[maxn]; void DFS(int v) { st[v] = squLen; squ[squLen++] = v; ; i=Edge[i].nxt){ int Eiv = Edge[i].v; DFS(Eiv); } en[v] = squLen-; } int main(void) { int n, q; while(~scanf("%d %d", &n, &q)){ squLen = ; totNode = ; Edge_init(n); ; i<=n; i++) scanf("%d", &weight[i]); ; i<=n-; i++){ int Fa; scanf("%d", &Fa); AddEdge(Fa, i+, weight[i]); } DFS(); root[] = ch[][] = ch[][] = ; ; i<squLen; i++) root[i] = newNode(); ; i<squLen; i++) Insert(i-, i, weight[squ[i]]); while(q--){ int v, x; scanf("%d %d", &v, &x); printf(, en[v], x)); } } ; }
HDU 6191 Query on A Tree ( 2017广西邀请赛 && 可持久化Trie )的更多相关文章
- HDU 6191 Query on A Tree(可持久化Trie+DFS序)
Query on A Tree Time Limit: 20000/10000 MS (Java/Others) Memory Limit: 132768/132768 K (Java/Othe ...
- [hdu 6191] Query on A Tree
Query on A Tree Time Limit: 20000/10000 MS (Java/Others) Memory Limit: 132768/132768 K (Java/Othe ...
- HDU 6191 Query on A Tree(字典树+离线)
Query on A Tree Time Limit: 20000/10000 MS (Java/Others) Memory Limit: 132768/132768 K (Java/Othe ...
- HDU 6191 Query on A Tree(可持久化Trie)
题意 \(n\) 个点的有根树,根为 \(1\) .每个点有点权,有 \(q\) 个询问,每次询问以 \(u\) 为根的子树的点的点权中异或 \(x\) 所得的最大值是多少. 思路 求出整棵树的 \( ...
- HDU - 6191 Query on A Tree (可持久化字典树/字典树合并)
题目链接 题意:有一棵树,树根为1,树上的每个结点都有一个数字x.给出Q组询问,每组询问有两个值u,x,代表询问以结点u为根的子树中的某一个数与x的最大异或值. 解法一:dfs序+可持久化字典树.看到 ...
- 2017广西邀请赛 Query on A Tree (可持续化字典树)
Query on A Tree 时间限制: 8 Sec 内存限制: 512 MB提交: 15 解决: 3[提交][状态][讨论版] 题目描述 Monkey A lives on a tree. H ...
- 2017ACM/ICPC广西邀请赛-重现赛
HDU 6188 Duizi and Shunzi 链接:http://acm.hdu.edu.cn/showproblem.php?pid=6188 思路: 签到题,以前写的. 实现代码: #inc ...
- S - Query on a tree HDU - 3804 线段树+dfs序
S - Query on a tree HDU - 3804 离散化+权值线段树 题目大意:给你一棵树,让你求这棵树上询问的点到根节点直接最大小于等于val的长度. 这个题目和之前写的那个给你一棵 ...
- hdu 4836 The Query on the Tree(线段树or树状数组)
The Query on the Tree Time Limit: 2000/1000 MS (Java/Others) Memory Limit: 32768/32768 K (Java/Ot ...
随机推荐
- CentOS7下MySQL服务启动失败原因及解决方法
在重启阿里的CentOS7服务器后,重启MySQL 出现错误 Starting mysqld (via systemctl): Job for mysqld.service failed becaus ...
- Mybatis动态SQL之使用foreach完成复杂查询
一.foreach概述 对于一些SQL语句中含有in条件.需要迭代条件集合来生产的情况,就需要使用foreach标签来实现SQL条件的迭代.foreach主要用在构建in条件中,它可以在SQL语句中迭 ...
- 解决Eclipse发布到Tomcat丢失依赖jar包的问题
解决Eclipse发布到Tomcat丢失依赖jar包的问题 如果jar文件是以外部依赖的形式导入的.Eclipse将web项目发布到Tomcat时,是不会自动发布这些依赖的. 可以通过Eclipse在 ...
- poj2226-Muddy Fields二分匹配 最小顶点覆盖 好题
题目 给到一个矩阵,有些格子上是草,有些是水.需要用宽度为1,长度任意的若干块木板覆盖所有的水,并不能覆盖草,木板可以交叉,但只能横竖放置,问最少要多少块板. 分析 经典的矩阵二分图构图和最小点覆盖. ...
- Codeforces 1178C. Tiles
传送门 考虑一块块填,首先 $(1,1)$ 有 $4$ 种方案 然后根据 $(1,1)$ 的右边颜色,$(1,2)$ 有两种方案,$(1,3)$ 根据 $(1,2)$ 也有两种方案... 考虑 $(2 ...
- 一份非常完整、详细的MySQL规范
一.数据库命令规范 所有数据库对象名称必须使用小写字母并用下划线分割 所有数据库对象名称禁止使用mysql保留关键字(如果表名中包含关键字查询时,需要将其用单引号括起来) 数据库对象的命名要能做到见名 ...
- b/s和c/s
一.B/S结构 B是英文单词“Browser”的首字母,即浏览器的意思:S是英文单词“Server”的首字母,即服务器的意思.B/S就是“Browser/Server”的缩写,即“浏览器/服务器”模式 ...
- Vue 路由拦截(对某些页面需要登陆才能访问)
前言 做项目的时候有个需求,就是发现没有登录,竟然也可以进入我的主页,这样肯定是不能容忍的.于是就要让他进入主页的时候,加个判断是否有登录,若没有登录,则返回登录界面,登录成功后还可以跳转到之前进入的 ...
- NODE代理,yang
const express = require('express'); const proxy = require('http-proxy-middleware');//引入代理中间件 const a ...
- Hadoop网页监控配置
接之前的内容http://www.cnblogs.com/jourluohua/p/8734406.html 在之前那的内容中,仅实现了Hadoop的安装和运行,距离实际使用还有很远.现在先完成一个小 ...