计蒜客 青出于蓝胜于蓝 (树状数组 + dfs序)
武当派一共有 nn 人,门派内 nn 人按照武功高低进行排名,武功最高的人排名第 11,次高的人排名第 22,... 武功最低的人排名第 nn。现在我们用武功的排名来给每个人标号,除了祖师爷,每个人都有一个师父,每个人可能有多个徒弟。
我们知道,武当派人才辈出,连祖师爷的武功都只能排行到 pp。也就是说徒弟的武功是可能超过师父的,所谓的青出于蓝胜于蓝。
请你帮忙计算每个人的所有子弟(包括徒弟的徒弟,徒弟的徒弟的徒弟....)中,有多少人的武功超过了他自己。
输入格式
输入第一行两个整数 n, p(1 \le n \le 100000, 1 \le p \le n)n,p(1≤n≤100000,1≤p≤n)。
接下来 n-1n−1 行,每行输入两个整数 u, v(1 \le u, v \le n)u,v(1≤u,v≤n),表示 uu 和 vv 之间存在师徒关系。
输出格式
输出一行 nn 个整数,第 ii 个整数表示武功排行为 ii 的人的子弟有多少人超过了他。
行末不要输出多余的空格。
样例输入复制
10 5 5 3 5 8 3 4 3 1 2 1 6 7 8 7 9 8 8 10
样例输出复制
0 0 2 0 4 0 1 2 0 0
/* @Author: Top_Spirit @Language: C++ */ #include <bits/stdc++.h> using namespace std ; typedef long long ll ; const int Maxn = 1e5 + 100 ; const double eps = 1e-6 ;int n, p ; vector < int > ve[Maxn] ; int l[Maxn], r[Maxn], low[Maxn] ; int Index, vis[Maxn] ;int lowbit(int i) { return i & (-i); }void add(int i){while (i <= n){low[i]++ ;i += lowbit(i) ;} }int getans (int i){int ans = 0 ;while (i){ans += low[i] ;i -= lowbit(i) ;}return ans ; }void dfs(int p , int zoon){if (vis[p]) return ;vis[p] = 1 ;l[p] = ++Index ;for (int i = 0; i < ve[p].size() ; i++){int to = ve[p][i] ;dfs(to, p) ;}r[p] = Index ; }int main (){cin >> n >> p ;for (int i = 1; i < n; i++) {int u, v ;cin >> u >> v ;ve[u].push_back(v) ;ve[v].push_back(u) ;}dfs(p, -1) ;for (int i = 1; i <= n; i++){cout << getans(r[i]) - getans(l[i]) << " \n"[i == n] ;add(l[i]) ;}return 0 ; }
计蒜客 青出于蓝胜于蓝 (树状数组 + dfs序)相关推荐
- 计蒜客-青出于蓝胜于蓝 dfs+树状数组
题目描述: 武当派一共有 n人,门派内 n 人按照武功高低进行排名,武功最高的人排名第 1,次高的人排名第 2,... 武功最低的人排名第 n.现在我们用武功的排名来给每个人标号,除了祖师爷,每个人都 ...
- BZOJ 2434: [Noi2011]阿狸的打字机 [AC自动机 Fail树 树状数组 DFS序]
2434: [Noi2011]阿狸的打字机 Time Limit: 10 Sec Memory Limit: 256 MB Submit: 2545 Solved: 1419 [Submit][S ...
- [BZOJ 2434][Noi2011]阿狸的打字机(AC自动机+树状数组+dfs序)
Description 打字机上只有28个按键,分别印有26个小写英文字母和'B'.'P'两个字母.经阿狸研究发现,这个打字机是这样工作的: ·输入小写字母,打字机的一个凹槽中会加入这个字母(这个字母 ...
- HDU - 5877 Weak Pair(离散化+树状数组+dfs序)
题目链接:点击查看 题目大意:给定一个n个节点的树,每个节点都有权值,现在定义weak pair(u,v)需要满足的两个条件: u是v的祖先: ; 问给定的树中有多少个weak pair: 题目分析: ...
- 【BZOJ3653】谈笑风生 离线+树状数组+DFS序
[BZOJ3653]谈笑风生 Description 设T 为一棵有根树,我们做如下的定义: ? 设a和b为T 中的两个不同节点.如果a是b的祖先,那么称"a比b不知道高明到哪里去了&quo ...
- Apple Tree(树状数组+dfs序+邻接表数组(链式前向星) )
链接:http://poj.org/problem?id=3321 Description There is an apple tree outside of kaka's house. Every ...
- 牛客练习赛22 E 树状数组 + DFS + 拓展欧几里德定理
题目链接 题意: 给定一个长度为nnn的序列,进行mmm次操作,操作有两类: 111 LLL RRR vvv : 区间[L,R][L, R][L,R]的每个数加上vvv 222 LLL RRR ppp ...
- hdu 6203 ping ping ping(贪心+树状数组+dfs序)
题目链接:hdu 6203 ping ping ping 题意: 给你一棵n+1个节点树,现在有q条路径不通,问你最少有多少个节点坏掉了. 题解: 考虑贪心,对这q条路径求一下lca,按照lca的深度 ...
- 牛客练习赛52 BGalahad 树状数组
传送门 题意: 求一个区间的和,但如果某一个数在这个区间出现了多次,这个数只能被计算一次. 官方题解:按右端点从小到大排序.建立树状数组ccc,维护贡献的前缀和. 由于权值ai 满足1≤ai≤500 ...
- CodeForces 396C 树状数组 + DFS
本主题开始看到以为段树或树状数组,但是,对于一个节点的有疑问的所有子节点的加权,这一条件被视为树的根,像 然后1号是肯定在第一层中,然后建立一个单向侧倒查,然后记录下来 其中每个节点 层,终于 两个节 ...
最新文章
- 编译原理练习题(第三章)
- tensorflow中的seq2seq例子为什么需要bucket? 有关tensorflow 的sequence2sequence例子,为什么需要用到buckets,rnn不是可以处理任意长度的数据吗
- 小程序wx:key中的关键字*this
- 腾讯民汉翻译征战全国机器翻译大赛夺得双冠
- 高斯卷积核如何生成 C语言实现
- 你家用的净水设备有哪些微生物污染呢?
- 一年三番五次修,卡巴斯基为何依然无法完美修复杀毒软件中的这些洞 (技术详情)?...
- 深度强化学习之稀疏奖励(Sparse Reward)
- Java EE 8终于给出即将完成的迹象
- C陷阱与缺陷(学习笔记)
- 微波雷达感应开关,雷达感应智能模块,照明节能环保技术应用
- 微信公众号 | 封面图及缩略图设置及修改技巧
- gis核密度分析工具_核密度分析工具的初探(Kernel Density)
- 公开信息查询的一些方法,查征信,查婚姻状况,查询公开个人信息
- 数据挖掘-贡献度分析
- FastDFS文件上传和下载(java代码实现)
- 计算机组成ar什么意思,到底什么是AR技术?
- 编译原理--实验2 语法分析
- 罗技M590优联无法使用的问题解决
- 仿IOS沉浸式状态栏实现
热门文章
- 免费动态域名解析软件dnspod每步nat123体会
- pr2打印机java 编程
- 计算机专业买笔记本电脑游戏本还是商务本好,购买笔记本电脑,游戏本真的是第一选择吗?...
- Matlab-CSMA_CA,pure ALOHA,时隙ALOHA协议性能对比分析仿真
- 分享咖啡基础知识——从咖啡小白到咖啡发烧友需要了解的那些事儿!
- WIN10外接显示器有妙招
- 灵感爆发:An/flash 影片剪辑动画播放一遍后,摆脱paly()的控制
- AR5B22网卡折腾记录
- 跑步为什么不能过量(对身体的危害)
- PHP月考---给自己建个错题本