P3066 [USACO12DEC] Running Away From the Barn G

news/2024/12/25 21:59:00/文章来源:https://www.cnblogs.com/LG017/p/18631513

P3066 [USACO12DEC] Running Away From the Barn G

题目描述

给定一颗 \(n\) 个点的有根树,边有边权,节点从 \(1\)\(n\) 编号,\(1\) 号节点是这棵树的根。

再给出一个参数 \(t\),对于树上的每个节点 \(u\),请求出 \(u\) 的子树中有多少节点满足该节点到 \(u\) 的距离不大于 \(t\)

输入格式

输入的第一行是两个整数,分别表示节点数 \(n\) 和给出的参数 \(t\)

\(2\) 到第 \(n\) 行,每行两个整数,第 \(i\) 行的整数 \(p_i, w_i\) 表示节点 \(i\) 的父节点为 \(p_i\),连结 \(i\)\(p_i\) 的边的边权为 \(w_i\)

输出格式

输出 \(n\) 行,每行一个整数,第 \(i\) 行的整数表示 \(i\) 的子树内到 \(i\) 的距离不大于 \(t\) 的节点个数。

数据规模与约定

对于全部的测试点,保证:

  • \(1 \leq n \leq 2 \times 10^5\)\(1 \leq t \leq 10^{18}\)
  • \(1 \leq p_i \lt i\)\(1 \leq w_i \leq 10^{12}\)

Solution:

线段树合并板子捏。

我们先对这整颗树求出每个点到根的距离 \(dis_{u}\) 然后对每个节点开一颗权值线段树,维护当前子树下的每个 \(dis\) 区间内的点的个数,那么到u距离不超过t就等价于:

\(dis\in[0,dis_{u}+t]\)

然后我们发现每个点都开一颗权值线段树然后遍历子树更新肯定是不行的,所以我们需要线段树合并。

然后这题就做完了

然后这题貌似还有个弱化版本this

Code:

#include<bits/stdc++.h>
#define int long long
const int N=2e5+5;
const int inf=1e17;
using namespace std;
struct Segment_Tree{int cnt,rt[N];struct Tree{int ls,rs,cnt;}t[N*40];void pushup(int x){t[x].cnt=t[t[x].ls].cnt+t[t[x].rs].cnt;}void insert(int &x,int l,int r,int pos){if(!x)x=++cnt;t[x].cnt++;if(l==r)return;int mid=l+r>>1;if(pos<=mid)insert(t[x].ls,l,mid,pos);if(mid<pos) insert(t[x].rs,mid+1,r,pos);}int merge(int x,int y,int l,int r){if(!x||!y)return x|y;if(l==r){t[x].cnt+=t[y].cnt;return x;}int mid=l+r>>1;t[x].ls=merge(t[x].ls,t[y].ls,l,mid);t[x].rs=merge(t[x].rs,t[y].rs,mid+1,r);pushup(x);return x;}int query(int x,int l,int r,int L,int R){if(L<=l&&r<=R){//cout<<"query:"<<l<<" "<<r<<"="<<t[x].cnt<<"\n";return t[x].cnt;}int mid=l+r>>1,res=0;if(L<=mid)res+=query(t[x].ls,l,mid,L,R);if(mid<R)res+=query(t[x].rs,mid+1,r,L,R);return res;}
}T;
int n,m;
vector<tuple<int,int> > E[N];
int dis[N],a[N],b[N],ans[N];
void dfs(int x)
{for(auto [y,w] :E[x]){dis[y]=dis[x]+w;dfs(y);}
}
void calc(int x)
{T.insert(T.rt[x],1,n,dis[x]);//cout<<"upd:"<<T.rt[x]<<" "<<dis[x]<<"\n";for(auto [y,w] : E[x]){calc(y);//cout<<"merge:"<<x<<" "<<y<<"="<<T.rt[x]<<" "<<T.rt[y]<<"\n";T.rt[x]=T.merge(T.rt[x],T.rt[y],1,n);}ans[x]=T.query(T.rt[x],1,n,1,a[x]);//cout<<"ans : "<<x<<" : "<<dis[x]<<"="<<ans[x]<<"\n";
}
void work()
{cin>>n>>m;for(int i=1,x,y;i<n;i++){scanf("%lld%lld",&x,&y);E[x].emplace_back(i+1,y);}dfs(1);for(int i=1;i<=n;i++)b[i]=dis[i];b[n+1]=inf;sort(b+1,b+2+n);int tot=unique(b+1,b+2+n)-(b+1);for(int i=1;i<=n;i++){a[i]=dis[i]+m;int k=lower_bound(b+1,b+1+tot,dis[i])-b-1,kk=lower_bound(b+1,b+1+tot,a[i])-b-1;dis[i]= dis[i]==b[k+1] ? k+1 : k;a[i]= a[i]==b[kk+1] ? kk+1 : kk;}calc(1);for(int i=1;i<=n;i++)printf("%lld\n",ans[i]);
}
#undef int
int main()
{//freopen("run.in","r",stdin);//freopen("run.out","w",stdout);work();return 0;
}

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.hqwc.cn/news/858862.html

如若内容造成侵权/违法违规/事实不符,请联系编程知识网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

P7302 [NOI1998] 免费的馅饼

P7302 [NOI1998] 免费的馅饼 题目描述 SERKOI 最新推出了一种叫做“免费馅饼”的游戏:游戏在一个舞台上进行。舞台的宽度为 \(w\) 格(从左到右依次用 \(1\) 到 \(w\) 编号),游戏者占一格。开始时游戏者可以站在舞台的任意位置,手里拿着一个托盘。下图为天幕的高度为 \(4\)…

CSRF跨站请求伪造攻击详解

本文为《白帽子Web讲安全(第2版)》——跨站请求伪造(CSRF)章节的阅读总结及摘录,详述了CSRF攻击的定义及防御方法等。一、CSRF攻击概述 1.1 CSRF攻击定义用户浏览器加载恶意网站时,浏览器中的恶意网站页面向另一目标网站自主发起一个恶意HTTP请求,该攻击方式即为CSRF攻击。…

R数据分析:工具变量回归的做法和解释,实例解析

前几天看了个视频,是2024年诺贝尔经济学奖得主在分享自己的研究,研究问题是“制度如何形成并影响经济繁荣”,在研究这个问题的时候他的PPT中提到研究的统计过程中用到了工具变量,想着再次大家介绍一下这个方法。说不定利用这个方法,哪天我的读者里面也出个诺贝尔奖得主呢,…

昆工25考研复试时间预测(信自院)

昆工昆明理工大学、计算机技术、人工智能、软件工程、网络空间安全、891计算机专业核心综合、计算机系统结构、计算机软件与理论、计算机应用技术、通信工程、817信号与系统、信号与信息处理、通信与信息系统、通信工程(含宽带网络、移动通信等)

WebP图片格式

WebP WebP 是一种图片文件格式,由 Google 开发,用于提供更好的图像压缩性能。支持有损压缩和无损压缩,同时支持透明度(类似 PNG 格式的 alpha 通道)和动画(类似 GIF 格式)。 WebP特点高效压缩 •有损压缩:与 JPEG 相比,WebP 的文件体积更小,同时保持类似的图像质量。…

谁让你创建两个对象的?

如果CLASSPATH下有两个不同版本的jar包,一个版本的jar包有@Component注解,另外一个版本没有,Spring到底会不会创建Bean?问题现象 之前遇到过一个问题,在一个微服务的目录下有相同功能 jar 包的两个不同的版本,其中一个版本里面的类有 @Component 注解,另外一个版本的类里…

打印三角形金字塔 、debug、java的方法、命令行传参、可变参数20241225

打印三角形金字塔 debug20241225package com.pangHuHuStudyJava.struct; public class Print_Tran {public static void main(String[] args) {for (int j = 0; j < 5; j++) {for (int r = 5; r > j; r--) {System.out.print( );}for (int s = 0; s < ((2*j)+1); s++…

OpenAI o3模型震撼发布:编程界的革命性突破,程序员的未来将何去何从?

当人工智能踏足编程领域,生产力的提升让人瞠目结舌。就在近日,OpenAI 发布了全新的 o3模型,其强大的代码生成能力和上下文理解能力,将编程带入了一个全新的时代。是机遇还是挑战?程序员们将如何面对这场技术风暴?o3模型究竟有何与众不同之处?它的发布会对程序员和整个软…

[Java/压缩] Java读取Parquet文件

序:契机生产环境有设备出重大事故,又因一关键功能无法使用,亟需将生产环境的原始MQTT报文(以 parquet 文件格式 + zstd 压缩格式 落盘)DOWN到本地,读取并解析。本文聚焦在 本地电脑,用 java 读取 parquet 文件相当多网络文档的读取代码无法正常运行,有必要记录一二,后续…

莫队从入门到人门

普通莫队 详介(P2709 小B的询问) 普通莫队处理问题的前提是问题可以离线,多次区间查询,\(O(n\sqrt m)\) 能过。 我们以 P2709 小B的询问 为例,假设当前区间为 \([l,r]\),答案为 \(ans\),那么 \(r\) 右移一位时,新加入一个数 \(x\),我们只要把 \(ans\) 加上 \(x\) 的贡…

nacos安装注意事项

一年多没玩了,都快忘了,最新版本已经2.3.x了 3.0也快问世了 Linux/Unix/Mac 单机启动命令: sh startup.sh -m standalone Windows startup.cmd -m standalone如果直接未启动就是集群模式,但是要注意nacos.properties里面配置集群信息本文来自博客园,作者:余生请多指教ANT…

PWN系列-2.27版本利用setcontext实现orw

PWN系列-2.27版本利用setcontext实现orw 知识 开启沙箱之后,我们就只能用orw的方式来得到flag。 这篇博客主要讲通过劫持__free_hook或者__malloc_hook利用setcontext在libc或者heap上执行rop或者shellcode。 在free堆块的时候,rdi会指向堆块,在检测到__free_hook有值的情况…