Count Descendants

题目大意

给定一颗以 \(1\) 为根的树,多次询问求某点的子树中深度为给定值的点的个数。

思路分析

对于每个深度开一个 vector,从大到小存下这个深度的所有点的 dfs 序开始值和结束值,询问时只需要在对应深度的 vector 中二分作差即可。

代码

#include <iostream>
#include <cmath>
#include <cstring>
#include <algorithm>
#include <vector> using namespace std;
const int N=400100; int to[N],nxt[N],head[N];
int n,idx=1,cnt,q,in1,in2;
int dfn[N],dep[N],End[N]; vector<int> v[N]; void add(int u,int v){
idx++;to[idx]=v;nxt[idx]=head[u];head[u]=idx;
} void dfs(int s,int fa){
dfn[s]=++cnt;
dep[s]=dep[fa]+1;
v[dep[s]].push_back(dfn[s]);
for(int i=head[s];i;i=nxt[i]){
int v=to[i];
if(v==fa) continue;
dfs(v,s);
}
End[s]=++cnt;
} int main(){
scanf("%d",&n);
for(int i=2;i<=n;i++){
scanf("%d",&in1);
add(i,in1);add(in1,i);
}
dfs(1,0);
scanf("%d",&q);
while(q--){
scanf("%d%d",&in1,&in2);in2++;
cout<<lower_bound(v[in2].begin(),v[in2].end(),End[in1])-lower_bound(v[in2].begin(),v[in2].end(),dfn[in1]-1)<<'\n';
}
return 0;
}

[ABC202E] Count Descendants 题解的更多相关文章

  1. [CF1188B]Count Pairs 题解

    前言 这道题目是道好题. 第一次div-2进前100,我太弱了. 题解 公式推导 我们观察这个式子. \[(a_i+a_j)(a_i^2+a_j^2)\equiv k \mod p\] 感觉少了点什么 ...

  2. Codeforces Round #626 (Div. 2, based on Moscow Open Olympiad in Informatics)部分(A~E)题解

    (A) Even Subset Sum Problem 题解:因为n非常非常小,直接暴力枚举所有区间即可. #include<bits/stdc++.h> using namespace ...

  3. MDX之百分比

    MDX的几种百分比的计算方法 实际应用中,特别是一些分析报表,经常需要计算数据百分比.份额.平均值.累计占比等,在数据仓库飞速发展的今天,我们需要了解一些经常编写的MDX语句的写法,以满足工作中的需要 ...

  4. 算法与数据结构基础 - 哈希表(Hash Table)

    Hash Table基础 哈希表(Hash Table)是常用的数据结构,其运用哈希函数(hash function)实现映射,内部使用开放定址.拉链法等方式解决哈希冲突,使得读写时间复杂度平均为O( ...

  5. 线段树详解 (原理,实现与应用)(转载自:http://blog.csdn.net/zearot/article/details/48299459)

    原文地址:http://blog.csdn.net/zearot/article/details/48299459(如有侵权,请联系博主,立即删除.) 线段树详解    By 岩之痕 目录: 一:综述 ...

  6. csp-s模拟测试42「世界线·时间机器·密码」

    $t3$不会 世界线 题解 题目让求的就是每个点能到点的数量$-$出度 设每个点能到的点为$f[x]$ 则$f[x]=x \sum\limits_{y}^{y\in son[x]} U f[y]$ 用 ...

  7. nodejs api 中文文档

    文档首页 英文版文档 本作品采用知识共享署名-非商业性使用 3.0 未本地化版本许可协议进行许可. Node.js v0.10.18 手册 & 文档 索引 | 在单一页面中浏览 | JSON格 ...

  8. LeetCode题解38.Count and Say

    38. Count and Say The count-and-say sequence is the sequence of integers beginning as follows: 1, 11 ...

  9. Lintcode249 Count of Smaller Number before itself solution 题解

    [题目描述] Give you an integer array (index from 0 to n-1, where n is the size of this array, data value ...

  10. 【题解】 bzoj3956: Count (ST表+单调栈)

    题面 Solution 看了一点点题解,自己又刚了\(2h30min\),刚了出来qwq,我好菜啊qwq 貌似这道题是BZOJ 4826的弱化,弱化都不会qwq凉凉 Solution 首先你可以考虑, ...

随机推荐

  1. 无缝数据转换!使用C++ 实现 Excel文件与CSV之间的相互转换

    CSV格式是一种通用的文本文件格式,可在多个应用程序之间共享和使用.相比之下,Excel文件是一种电子表格格式,通常只能在Microsoft Excel中编辑和查看.因此,将Excel文件转换为CSV ...

  2. CANopen转ProfiNet网关在大跨径门机起重设备同步纠偏控制应用案例

    大型门机起重设备纠偏控制系统采用CanOpen通讯协议,而PLC使用的是ProfiNet协议,看似不兼容的两种协议如何实现互通?今天我们来看一下这个案例. 通过捷米特JM-COP-PN设置纠偏系统的参 ...

  3. RabbitMQ 多消费者 使用单信道和多信道区别

    RabbitMQ 多个消费者共用一个信道实例 与 每个消费者使用不同的信道实例 区别: 1. 多个消费者共用一个信道实例:这种方式下,多个消费者共享同一个信道实例来进行消息的消费. 优点:这样可以减少 ...

  4. 音视频开发进阶——YUV与RGB的采样与存储格式

    在上一篇文章中,我们带大家了解了视频.图像.像素和色彩之间的关系,还初步认识了两种常用的色彩空间,分别是大家比较熟悉的 RGB,以及更受视频领域青睐的 YUV.今天,我们将继续深入学习 RGB.YUV ...

  5. cgroup Linux中的资源限制

    参考链接:容器技术的基石:cgroup 直接上实验: # docker run --rm -d --cpus=0.1 --memory=100M --name=test redis:alpine WA ...

  6. Kubernets常用命令

    查看所有namespace的pods运行情况 kubectl get pods --all-namespaces kubectl get service -ALL kubectl get deploy ...

  7. Verilog实现奇分频电路

    在FPGA中,计数器电路用途很广,一般计数器电路都可作为分频电路.实现占空比为50的偶分频电路很好实现.但实现占空比为50的奇分频电路有点难度.下面给出一个简单例子,记录学习奇分频电路的过程. 实现占 ...

  8. 产品代码都给你看了,可别再说不会DDD(一):DDD入门

    这是一个讲解DDD落地的文章系列,作者是<实现领域驱动设计>的译者滕云.本文章系列以一个真实的并已成功上线的软件项目--码如云(https://www.mryqr.com)为例,系统性地讲 ...

  9. python机器学习经典算法代码示例及思维导图(数学建模必备)

    最近几天学习了机器学习经典算法,通过此次学习入门了机器学习,并将经典算法的代码实现并记录下来,方便后续查找与使用. 这次记录主要分为两部分:第一部分是机器学习思维导图,以框架的形式描述机器学习开发流程 ...

  10. Three.js中实现碰撞检测

    1. 引言 碰撞检测是三维场景中常见的需求,Three.js是常用的前端三维JavaScript库,本文就如何在Three.js中进行碰撞检测进行记述 主要使用到的方法有: 射线法Raycaster ...