可并堆

复习一下可并堆

维护一个大跟堆,每次把节点儿子打上边权标记,然后合并,可并堆上维护一个size,每次把大于l的弹出,size就是答案

程序中那个d写l和r速度差不多,我写l是表示右儿子到u的最长距离

#include<bits/stdc++.h>
using namespace std;
const int N = ;
struct edge {
int to;
long long w;
edge(int to = , long long w = ) : to(to), w(w) {}
};
int n;
long long L;
long long dis[N], tag[N];
int root[N], l[N], r[N], d[N], ans[N], size[N];
vector<edge> G[N];
void pushdown(int x)
{
if(tag[x] == ) return;
tag[l[x]] += tag[x];
dis[l[x]] += tag[x];
tag[r[x]] += tag[x];
dis[r[x]] += tag[x];
tag[x] = ;
}
int merge(int u, int v)
{
if(!u) return v;
if(!v) return u;
pushdown(u);
pushdown(v);
if(dis[u] < dis[v]) swap(u, v);
r[u] = merge(r[u], v);
if(d[r[u]] > d[l[u]]) swap(l[u], r[u]);
d[u] = d[l[u]] + ;
size[u] = size[l[u]] + size[r[u]] + ;
return u;
}
void dfs(int u)
{
root[u] = u;
size[u] = ;
for(int i = ; i < G[u].size(); ++i)
{
edge e = G[u][i];
dfs(e.to);
tag[root[e.to]] += e.w;
dis[root[e.to]] += e.w;
root[u] = merge(root[u], root[e.to]);
}
while(dis[root[u]] > L && root[u]) root[u] = merge(l[root[u]], r[root[u]]);
ans[u] = size[root[u]];
}
int main()
{
scanf("%d%lld", &n, &L);
for(int i = ; i <= n; ++i)
{
int u;
long long len;
scanf("%d%lld", &u, &len);
G[u].push_back(edge(i, len));
}
dfs();
for(int i = ; i <= n; ++i) printf("%d\n", ans[i]);
return ;
}

最新文章

  1. flume 不报错但是不能正常使用
  2. js基础篇——原型与原型链的详细理解
  3. asp.net获取站点根目录下子目录的名称
  4. 我对windows消息机制的理解(参考深入浅出MFC,欢迎批评指正!!)
  5. CSS基础选择器温故-1
  6. chart.js图表库案例赏析,饼图添加文字
  7. C# ZXing.Net生成二维码、识别二维码、生成带Logo的二维码(二)
  8. 第 7 章 MySQL 数据库锁定机制
  9. 【BZOJ4003】【JLOI2015】城池攻占
  10. flex布局justify-content属性和align-items属性设置
  11. error LNK1169 找到一个或多个多重定义的符号的解决方法
  12. Typecho——数据库无法连接问题
  13. 洛谷P1414又是毕业季二题解
  14. Expo大作战(三十三)--expo sdk api之MapView(地图),MailComposer(磁力传感计),Lottie(动画)
  15. [转帖] 常见的cmd命令
  16. JEECG 命名规范
  17. Java虚拟机笔记(一):类加载机制
  18. 给定随机数列求第k大的数字
  19. 解决不能在本地使用JQuery load的方法
  20. Ubuntu之No module named cv2

热门文章

  1. 第二节:Css重写样式
  2. 【转载】dubbo约束的引入(解决eclipse中报错问题)
  3. checkbox prop无效问题
  4. uva 272 Tex中的引号(Tex Quotes)
  5. Ubuntu---vim配置
  6. slf4j-api、slf4j-log4j12、log4j的关系
  7. java解析从接口获取的json内容并写到excle(只写与标题匹配的值,并非把所有的接口返回值都写进去)
  8. 将登录代码模块化,然后用add address接口来调用它,success!
  9. Python爬虫入门教程: 27270图片爬取
  10. PAT 1138 Postorder Traversal