我们可以遍历得出每个节点到根节点的距离h,然后用可并堆进行维护。树形dp

我用的是pairing heap

 #include<cstdio>
#include<algorithm>
#include<queue>
using namespace std ; struct node {
long long value ;
node * brother ;
node * child ;
node ( const long long value ) : value ( value ) ,
brother ( ) , child ( ) {} ;
} ; node * merge ( node * a , node * b ) {
if ( a == ) return b ;
if ( b == ) return a ;
if ( a -> value < b -> value ) swap ( a , b ) ;
b -> brother = a -> child ;
a -> child = b ;
a -> brother = ;
return a ;
} node * pop ( node * a ) {
node * o = a -> child ;
delete a ;
if ( o == ) return ;
static queue < node * > q ;
while ( ! q . empty () ) q . pop () ;
while ( o ) {
q . push ( o ) ;
o = o -> brother ;
}
while ( q . size () > 1u ) {
node * a = q . front () ;
q . pop () ;
node * b = q . front () ;
q . pop () ;
q . push ( merge ( a , b ) ) ;
}
return q . front () ;
} const int MAXN = + ;
int pa [ MAXN ] ;
long long l [ MAXN ] ;
long long h [ MAXN ] ;
int size [ MAXN ] ;
int N ;
long long L ;
node * heap [ MAXN ] ; int main () {
scanf ( "%d%lld" , & N , & L ) ;
for ( int i = ; i <= N ; ++ i )
scanf ( "%d%lld" , & pa [ i ] , & l [ i ] ) ;
for ( int i = ; i <= N ; ++ i ) h [ i ] = l [ i ] + h [ pa [ i ] ] ;
for ( int i = ; i <= N ; ++ i ) {
heap [ i ] = new node ( h [ i ] ) ;
size [ i ] = ;
}
for ( int i = N ; i >= ; -- i ) {
while ( heap [ i ] -> value - h [ i ] > L ) {
heap [ i ] = pop ( heap [ i ] ) ;
size [ i ] -- ;
}
heap [ pa [ i ] ] = merge ( heap [ pa [ i ] ] , heap [ i ] ) ;
size [ pa [ i ] ] += size [ i ] ;
}
while ( heap [ ] -> value - h [ ] > L ) {
heap [ ] = pop ( heap [ ] ) ;
size [ ] -- ;
}
for ( int i = ; i <= N ; ++ i )
printf ( "%d\n" , size [ i ] ) ;
return ;
}

最新文章

  1. asp.net ajax 调用后台方法
  2. SQL server 2014安装以及解决连接数据库失败问题
  3. LeetCode 231 Power of Two
  4. uva 10673 Play with Floor and Ceil
  5. UML 中关系详解以及在visio中的表示
  6. Nmon 监控 Linux 的系统性能
  7. .net设计模式之装饰模式
  8. BZOJ 3391: [Usaco2004 Dec]Tree Cutting网络破坏(搜索)
  9. webpack+vue-cil 中proxyTable配置接口地址代理
  10. SQL两列数据,行转列
  11. hprose for php
  12. [转]Centos7 fastdfs/nginx 安装与配置
  13. linux安装mysql和httpd
  14. IntelliJ IDEA 添加junit插件
  15. 【Unity】2.1 初识Unity编辑器
  16. Java精选笔记_文件上传与下载
  17. android中LayoutInflater.from(context).inflate的分析
  18. CSS: body{font-size: 62.5%;}设置原因
  19. MAJOR-MINOR-MKDEV
  20. day33 GIL锁 线程队列 线程池

热门文章

  1. python元组操作
  2. 01-HTML深入
  3. python之三元运算
  4. ruby require的使用
  5. Kubernetes-GC
  6. python2.7练习小例子(十七)
  7. vue2.0 Axios 的简单用法
  8. jenkins 构建部署时tomcat7 内存溢出解决方案
  9. 联想ThinkPad S3-S440虚拟机安装,ubuntu安装,Hadoop(2.7.1)详解及WordCount运行,spark集群搭建
  10. 年薪20万Python工程师进阶(7):Python资源大全,让你相见恨晚的Python库