CF893F Subtree Minimum Query 主席树】的更多相关文章

如果是求和就很好做了... 不是求和也无伤大雅.... 一维太难限制条件了,考虑二维限制 一维$dfs$序,一维$dep$序 询问$(x, k)$对应着在$dfs$上查$[dfn[x], dfn[x] + sz[x] - 1]$,在$dep$序上查$[dep[x], dep[x] + k]$ 这样子,每个询问对应查询一段矩形内的最小值 然而树套树是过不了的..... 发现一个询问看似在$dep$序上对应了一段区间,实际上可以扩展到对应一段前缀 这样子,只需要一个主席树就可以做到了 复杂度$O(n…
这题非常好!!! 主席树版本 很简单的题目,给一个按照指定节点的树,树上有点权,你需要回答给定节点的子树中,和其距离不超过k的节点中,权值最小的. 肯定首先一想,按照dfs序列建树,然后按照深度为下标,建立主席树,那么我们通过主席树相间得到区间状态,但是很不幸,区间最值不能通过减去历史版本的主席树得到. 考虑照深度建立主席树,按照dfs下标建立,貌似可以耶!!! 我们直接查询当前节点往下k深度的主席树,它保存的就是从深度为1-到深度为deep[p]+k深度的所有节点的dfs序对应的点权值 我们查…
Description 给你一颗有根树,点有权值,m次询问,每次问你某个点的子树中距离其不超过k的点的权值的最小值.(边权均为1,点权有可能重复,k值每次询问有可能不同,强制在线) Input 第一行两个数,为点数$n$和树根$r$. 第二行$n$个数,为每个点的权值. 后面$n-1$行给出树边 再一行$m$,后面给出$m$组询问. Output 一行答案. Sample Input 5 2 1 3 2 3 5 2 3 5 1 3 4 4 1 2 1 2 2 3 Sample Output 2…
CF893F Subtree Minimum Query 输入输出格式 输入格式: The first line contains two integers \(n\) and \(r\) ( \(1<=r<=n<=100000\) ) - the number of vertices in the tree and the index of the root, respectively. The second line contains n integers \(a_{1},a_{2}…
Description: 给定一棵树,每次询问某点子树中到其不超过k的所有点的最小点权 强制在线 Hint: \(n,m\le 10^5\) Solution: 看到题目第一反应是以深度为下标,dfs序为版本建树 然而不行,因为min不满足前缀可减 所以我们换过来,每个\(dep\)建树表示\(<=dep\)所有点的权值 在上面直接查x子树的min就好了 貌似这题用线段树合并就是SBT...... #include <map> #include <set> #include…
893F - Subtree Minimum Query 题意 给出一棵树,每次询问 \(x\) \(k\),求以 \(x\) 为根结点的子树中的结点到结点 \(x\) 的距离小于等于 \(k\) 的结点权值最小值. 分析 可持久化线段树,对每个结点都建树,然后尽可能复用子孙结点的线段树. 对于一般的线段树,我们并不需要记录左右子结点的标号,因为如果当前节点标号为 \(rt\) ,则左右子结点标号为 \(2 * rt\) 和 \(2 * rt + 1\) .对于本题,若有 \(u\) 是 \(v…
[cf contest 893(edu round 33)] F - Subtree Minimum Query time limit per test 6 seconds memory limit per test 512 megabytes input standard input output standard output You are given a rooted tree consisting of n vertices. Each vertex has a number writ…
题目链接:https://cn.vjudge.net/problem/CodeForces-893F 题目大意:给你n个点,每一个点有权值,然后这n个点会构成一棵树,边权为1.然后有q次询问,每一次询问包括t1和t2.让你找出以t1为根节点的树上,距离t1不超过t2的节点,最小的点权值. 每一次的t1是(上次询问的结果+t1)%n+1,t2是(上次询问的结果+t1).所以就必须的强制在线了. 具体思路:线段树合并,通过dfs序进行遍历,以每一个点的深度作为下标建树.一开始,每一个节点储存的是从当…
传送门 线段树合并菜题. 题意简述:给一棵带点权的有根树,多次询问某个点ppp子树内距离ppp不超过kkk的点的点权最小值,强制在线. 思路: 当然可以用dfsdfsdfs序+主席树水过去. 然而线段树合并也是一个不错&&好写的思路 我们按照深度为下标建立权值线段树然后线段树合并预处理一波. 查询就转化成区间查询了. 注意因为要保存下每一个子树的信息所以合并的时候要新建节点来储存信息. 代码: #include<bits/stdc++.h> #define ri registe…
题意 给定一棵 \(n\) 个点的带点权树,以 \(1\) 为根, \(m\) 次询问,每次询问给出两个值 \(p, k\) ,求以下值: \(p\) 的子树中距离 \(p \le k\) 的所有点权最小值,询问强制在线. \(n \le 10^5 , m \le 10^6, TL = 6s\) 题解 如果不强制在线,直接线段树合并就做完了. 强制在线,不难想到用一些可持久化的结构来维护这些东西. 其实可以类似线段树合并那样考虑,也就是说每次合并的时候我们依然使用儿子的信息. 只要在合并 \(x…