[CF893F] Subtree Minimum Query
Description:
给定一棵树,每次询问某点子树中到其不超过k的所有点的最小点权
强制在线
Hint:
\(n,m\le 10^5\)
Solution:
看到题目第一反应是以深度为下标,dfs序为版本建树
然而不行,因为min不满足前缀可减
所以我们换过来,每个\(dep\)建树表示\(<=dep\)所有点的权值
在上面直接查x子树的min就好了
貌似这题用线段树合并就是SBT......
#include <map>
#include <set>
#include <stack>
#include <cmath>
#include <queue>
#include <cstdio>
#include <cstring>
#include <cstdlib>
#include <iostream>
#include <algorithm>
using namespace std;
typedef long long ll;
const int mxn=5e5+5,inf=1e9;
int n,m,tot,cnt,rk[mxn],hd[mxn];
inline int read() {
char c=getchar(); int x=0,f=1;
while(c>'9'||c<'0') {if(c=='-') f=-1;c=getchar();}
while(c<='9'&&c>='0') {x=(x<<3)+(x<<1)+(c&15);c=getchar();}
return x*f;
}
inline void chkmax(int &x,int y) {if(x<y) x=y;}
inline void chkmin(int &x,int y) {if(x>y) x=y;}
struct ed {
int to,nxt;
}t[mxn<<1];
inline void add(int u,int v) {
t[++cnt]=(ed) {v,hd[u]}; hd[u]=cnt;
}
int df,dep[mxn],lst[mxn],dfn[mxn],tr[mxn<<5],ls[mxn<<5],rs[mxn<<5],a[mxn],rt[mxn];
void dfs(int u,int fa) {
dep[u]=dep[fa]+1; dfn[u]=++df;
for(int i=hd[u];i;i=t[i].nxt) {
int v=t[i].to;
if(v==fa) continue ;
dfs(v,u);
}
lst[u]=df;
}
int cmp(int x,int y) {
return dep[x]<dep[y];
}
void update(int las,int &p,int l,int r,int pos,int val) {
p=++tot;
if(l==r) {tr[p]=min(tr[p],val);return ; }int mid=(l+r)>>1;
if(pos<=mid) update(ls[las],ls[p],l,mid,pos,val),rs[p]=rs[las];
else update(rs[las],rs[p],mid+1,r,pos,val),ls[p]=ls[las];
tr[p]=min(tr[ls[p]],tr[rs[p]]);
}
int query(int p,int l,int r,int ql,int qr) {
if(!p) return inf;
if(ql<=l&&r<=qr) return tr[p];
int mid=(l+r)>>1; int res=inf;
if(ql<=mid) chkmin(res,query(ls[p],l,mid,ql,qr));
if(qr>mid) chkmin(res,query(rs[p],mid+1,r,ql,qr));
return res;
}
int r;
int main()
{
n=read(); r=read(); int u,v,p,q; memset(tr,0x3f,sizeof(tr));
for(int i=1;i<=n;++i) rk[i]=i,a[i]=read();
for(int i=1;i<n;++i) {
u=read(); v=read();
add(u,v); add(v,u);
}
dfs(r,0); int ans=0;
sort(rk+1,rk+n+1,cmp);
for(int i=1;i<=n;++i)
update(rt[dep[rk[i-1]]],rt[dep[rk[i]]],1,n,dfn[rk[i]],a[rk[i]]);
m=read();
for(int i=1;i<=m;++i) {
p=(read()+ans)%n+1; q=(read()+ans)%n;
printf("%d\n",ans=query(rt[min(dep[p]+q,dep[rk[n]])],1,n,dfn[p],lst[p])); //注意特判深度超出最大深度
}
return 0;
}
[CF893F] Subtree Minimum Query的更多相关文章
- CF893F Subtree Minimum Query 解题报告
CF893F Subtree Minimum Query 输入输出格式 输入格式: The first line contains two integers \(n\) and \(r\) ( \(1 ...
- CF893F:Subtree Minimum Query(线段树合并)
Description 给你一颗有根树,点有权值,m次询问,每次问你某个点的子树中距离其不超过k的点的权值的最小值.(边权均为1,点权有可能重复,k值每次询问有可能不同,强制在线) Input 第一行 ...
- CF893F Subtree Minimum Query 主席树
如果是求和就很好做了... 不是求和也无伤大雅.... 一维太难限制条件了,考虑二维限制 一维$dfs$序,一维$dep$序 询问$(x, k)$对应着在$dfs$上查$[dfn[x], dfn[x] ...
- Codeforces 893F - Subtree Minimum Query
893F - Subtree Minimum Query 题意 给出一棵树,每次询问 \(x\) \(k\),求以 \(x\) 为根结点的子树中的结点到结点 \(x\) 的距离小于等于 \(k\) 的 ...
- [cf contest 893(edu round 33)] F - Subtree Minimum Query
[cf contest 893(edu round 33)] F - Subtree Minimum Query time limit per test 6 seconds memory limit ...
- Educational Codeforces Round 33 (Rated for Div. 2) F. Subtree Minimum Query(主席树合并)
题意 给定一棵 \(n\) 个点的带点权树,以 \(1\) 为根, \(m\) 次询问,每次询问给出两个值 \(p, k\) ,求以下值: \(p\) 的子树中距离 \(p \le k\) 的所有点权 ...
- Subtree Minimum Query CodeForces - 893F (线段树合并+线段树动态开点)
题目链接:https://cn.vjudge.net/problem/CodeForces-893F 题目大意:给你n个点,每一个点有权值,然后这n个点会构成一棵树,边权为1.然后有q次询问,每一次询 ...
- 2019.01.19 codeforces893F.Subtree Minimum Query(线段树合并)
传送门 线段树合并菜题. 题意简述:给一棵带点权的有根树,多次询问某个点ppp子树内距离ppp不超过kkk的点的点权最小值,强制在线. 思路: 当然可以用dfsdfsdfs序+主席树水过去. 然而线段 ...
- EC Round 33 F. Subtree Minimum Query 主席树/线段树合并
这题非常好!!! 主席树版本 很简单的题目,给一个按照指定节点的树,树上有点权,你需要回答给定节点的子树中,和其距离不超过k的节点中,权值最小的. 肯定首先一想,按照dfs序列建树,然后按照深度为下标 ...
随机推荐
- python函数的闭包
---恢复内容开始--- python允许有内部函数,也就是说可以在函数内部再定义一个函数,这就会产生变量的访问问题,类似与java的内部类,在java里内部类可以直接访问外部类的成员变量和方法,不管 ...
- Redis代码——Python篇
需要安装的库:redis import redis # 连接数据库 r = redis.StrictRedis(host="localhost", port=6379, passw ...
- Git学习(一):初始化仓库、添加文件、版本回退
目录 Git学习(一):初始化.添加文件.版本回退 初始化一个仓库 添加文件到Git仓库 版本回退 Git学习(一):初始化.添加文件.版本回退 初始化一个仓库 本文使用的命令行工具为cmder,部分 ...
- The Ethereum devp2p and discv4 protocol Part I
描述 本文章分上下两篇 上篇:讲述以太坊devp2p与disc4节点发现协议 下篇:实践篇,实现如何获取以太坊所有节点信息(ip,port,nodeId,client,type,os) 正文 devp ...
- Spring Cloud 2-Zuul 网关服务(六)
Spring Cloud Zuul 1.pom.xml 2.application.yml Application.java 1.pom.xml <!-- zuul 网关服务 --> ...
- windows 安装docker报错:Error checking TLS connection: ssh command error: command : ip addr show
今天安装docker部署的时候总是再报这个错误. 报错的原因是初始化的时候出错了. 在docker 安装目录下有一个文件,如下图所示 将它复制到你电脑用户名目录下生成.docker 的文件夹中,如下图 ...
- java 文件目录树
1. 目标格式,使用tree命令时,目录树格式如下. public class TreeTest { public static void main(String[] args) { File roo ...
- 概率dp的边界处理 POJ 2096
题目地址:https://vjudge.net/problem/POJ-2096 说的是有n个bug,和s个系统.现在一个人一天能发现一个bug,它可能是任何一个系统中的,也可能会发现已经发现过的bu ...
- 2018-2019-2 20165314『网络对抗技术』Exp5:MSF基础应用
一.原理与实践说明 1.实践内容 本实践目标是掌握metasploit的基本应用方式,重点常用的三种攻击方式的思路.具体需要完成: 一个主动攻击实践,如ms08-067; (1分) 一个针对浏览器的攻 ...
- .asmx支持post请求或者get请求调用(WebService "因 URL 意外地以 结束,请求格式无法识别" 的解决方法)
使用Post调用以asmx形式提供的webservice时,在本机调试没有调用问题.一旦部署至服务器后会提示如下信息: <html> <head> <title>因 ...