如果没有边数限制就是裸的淀粉质,如果有了加上一个树状数组记边数就行了。

  1. #include<stdio.h>
  2. #include<stdlib.h>
  3. #include<string.h>
  4. #include<math.h>
  5. #include<algorithm>
  6. #include<queue>
  7. #include<set>
  8. #include<map>
  9. #include<iostream>
  10. using namespace std;
  11. #define re register
  12. #define ll long long
  13. inline int gi(){
  14. int f=1,sum=0;char ch=getchar();
  15. while(ch>'9' || ch<'0'){if(ch=='-')f=-1;ch=getchar();}
  16. while(ch>='0' && ch<='9'){sum=(sum<<3)+(sum<<1)+ch-'0';ch=getchar();}
  17. return f*sum;
  18. }
  19. const int N=400010;
  20. int n,w,front[N],cnt,rt,siz[N],vis[N],tot,f[N];
  21. struct node{int to,nxt,w;}e[N];
  22. void Add(int u,int v,int w){e[++cnt]=(node){v,front[u],w};front[u]=cnt;}
  23. void getroot(int u,int ff){
  24. siz[u]=1;f[u]=0;
  25. for(int i=front[u];i;i=e[i].nxt){
  26. int v=e[i].to;if(vis[v] || v==ff)continue;
  27. getroot(v,u);
  28. siz[u]+=siz[v];
  29. f[u]=max(f[u],siz[v]);
  30. }
  31. f[u]=max(f[u],tot-siz[u]);
  32. if(f[u]<f[rt])rt=u;
  33. }
  34. ll ans;int dis[N],dep[N];
  35. struct thing{
  36. int dis,dep;
  37. bool operator<(const thing &b)const{return dis<b.dis;}
  38. }p[N];
  39. void getdis(int u,int ff){
  40. p[++cnt]=(thing){dis[u],dep[u]};
  41. for(int i=front[u];i;i=e[i].nxt){
  42. int v=e[i].to;if(v==ff || vis[v])continue;
  43. dep[v]=dep[u]+1;dis[v]=dis[u]+e[i].w;
  44. getdis(v,u);
  45. }
  46. }
  47. int c[N],L;
  48. int lowbit(int x){return x&(-x);}
  49. void Add(int x,int d){while(x<=n+1){c[x]+=d;x+=lowbit(x);}}
  50. int query(int x){if(x<=0)return 0;int ret=0;while(x){ret+=c[x];x-=lowbit(x);}return ret;}
  51. ll calc(int u,int ds,int dp){
  52. dis[u]=ds;dep[u]=dp;cnt=0;
  53. getdis(u,u);
  54. sort(p+1,p+cnt+1);
  55. for(int i=1;i<=cnt;i++)Add(p[i].dep+1,1);
  56. int l=1,r=cnt;ll ret=0;
  57. while(l<r){
  58. if(p[l].dis+p[r].dis<=w){
  59. Add(p[l].dep+1,-1);
  60. ret+=query(L-p[l].dep+1);
  61. l++;
  62. }
  63. else{
  64. Add(p[r].dep+1,-1);
  65. r--;
  66. }
  67. }
  68. Add(p[l].dep+1,-1);
  69. return ret;
  70. }
  71. void solve(int u){
  72. ans+=calc(u,0,0);
  73. vis[u]=1;
  74. for(int i=front[u];i;i=e[i].nxt){
  75. int v=e[i].to;if(vis[v])continue;
  76. ans-=calc(v,e[i].w,1);
  77. rt=0;tot=siz[v];
  78. getroot(v,v);
  79. solve(rt);
  80. }
  81. }
  82. int main(){
  83. n=gi();L=gi();w=gi();
  84. for(int i=2;i<=n;i++){int fa=gi(),v=gi();Add(fa,i,v);Add(i,fa,v);}
  85. tot=f[0]=n;
  86. getroot(1,0);
  87. solve(rt);
  88. printf("%lld\n",ans);
  89. return 0;
  90. }

CF293E Close Vertice的更多相关文章

  1. cf293E Close Vertices(树分治+BIT)

    E. Close Vertices You've got a weighted tree, consisting of n vertices. Each edge has a non-negative ...

  2. CF293E Close Vertices 点分治+树状数组

    开始zz写了一个主席树,后来发现写个树状数组就行~ #include <cstdio> #include <vector> #include <algorithm> ...

  3. 纸上谈兵: 图 (graph)

    作者:Vamei 出处:http://www.cnblogs.com/vamei 欢迎转载,也请保留这段声明.谢谢! 图(graph)是一种比较松散的数据结构.它有一些节点(vertice),在某些节 ...

  4. ICEM(2)—机翼翼稍网格绘制

    有时我们需要观察翼尖涡,这就需要将机翼全部被网格包围.但是网上比较多的教程都是机翼边缘即为网格边缘,机翼位于网格内部的不多.若是直接将网格拉伸,则会产生结构和非结构网格交错的情况.下面是绘制步骤 1. ...

  5. CF 407B Long Path[观察性质 DP]

    B. Long Path time limit per test 1 second memory limit per test 256 megabytes input standard input o ...

  6. HDU 4358 Boring counting(莫队+DFS序+离散化)

    Boring counting Time Limit: 6000/3000 MS (Java/Others)    Memory Limit: 98304/98304 K (Java/Others) ...

  7. hdu 4358 Boring counting dfs序+莫队+离散化

    Boring counting Time Limit: 6000/3000 MS (Java/Others)    Memory Limit: 98304/98304 K (Java/Others) ...

  8. 纸上谈兵:图(graph)

    作者:Vamei 出处:http://www.cnblogs.com/vamei 欢迎转载,也请保留这段声明.谢谢! 图(graph)是一种比较松散的数据结构.它有一些节点(vertice),在某些节 ...

  9. Shape comparison language

      形状比较语言, 九交模型 In this topic About shape comparison language Dimensionality Extensions to the CBM SC ...

随机推荐

  1. 使用Feign通过服务名调用服务,找不到服务

    fegineureka 报错环境: eureka注册中心在远程服务器上 本地服务注册到远程的eureka注册中心 本地服务通过Fegin组件+服务名调用服务 报错时,注册中心的情况: Applicat ...

  2. 微信开发者工具 关于no such file or directory

    在新建页面中,保存后弹出 “ no such file or directory ” 错误 原因是打开了一个文件,然后在目录树中删除了它,但是这个被删除的页面依旧在打开状态,开发者工具在编译保存时由于 ...

  3. java - day011 - 集合, ArrayList HashMap,HashSet, Iterator 接口, for-each 循环格式

    集合 ArrayList 丑数: 能被3,5,7整除多次, ArrayList     list 接口             | - ArrayList             | - Linked ...

  4. Linux——发行版

    主流发行版 1. Red Hat Linux Red Hat 公司一直是Linux 乃至开源世界的领导者.其有两个不同的发行版本: 一个商用版,称为Red Hat Enterprise Linux,专 ...

  5. Java线程(1)

    多线程快速入门 线程与进程区别 每个正在系统上运行的程序都是一个进程.每个进程包含一到多个线程.线程是一组指令的集合,或者是程序的特殊段,它可以在程序里独立执行.也可以把它理解为代码运行的上下文.所以 ...

  6. 虚拟dom应用

    vdom如何应用,核心api是什么 1.介绍snabbdom(开源社区用的多,vue2用的是他) 首先回顾下之前的vdom格式 真实的dom <body> <ul id=" ...

  7. MySQL进阶16 - 视图的创建/修改/删除/更新--可更新性的不适用条件

    #进阶16 : 视图 /* 含义: 虚拟表,和普通表一样使用;(从5.1开始使用的:)是通过表动态生成的数据 创建语法: create view 视图名 as 查询语句; ---------- 作用: ...

  8. ui自动化笔记 selenium_webdriver,ui自动化框架(web)

    Selenium学习笔记 selenium webdriver是业界公认ui自动化测试的标准,其封装的api可以对浏览器的任何地方进行操作 selenium2.0和selenium3.0的区别? 3. ...

  9. 网站添加logo图片

    网站添加log图片 第一种方法 这里使用的图片一般为16*16大小的图片 <link rel="shortcut icon" href="http://xxx.xx ...

  10. jQuery模拟键盘打字逐字逐句显示文本

    jQuery模拟键盘打字逐字逐句显示文本 html代码 <!doctype html> <html lang="zh"> <head> < ...