欢迎来到起遇信息学
起遇信息学正处于上线筹建阶段,以下功能已全部开放免费体验: ✅ 完整题库浏览与代码提交评测(C / C++ / Python / Java 等) ✅ 入门到进阶的系列课程试读、作业与考试 ✅ AI 提示、AI 作业分析等智能助教功能 ✅ 赛事模拟与个人能力报告 ✅ 邮箱注册开放 ⏳ 付费课程订阅与微信/支付宝支付通道 ⏳ 手机号登录,微信扫码登录、微信公众号绑定 使用中如遇任何问题,欢迎通过页面底部 **"联系我们"** 与我们沟通。
J31005.10-5 子网规模:树上计数
10-5 子网规模:树上计数
10-5 子网规模:树上计数
"控制链找到了,但我们需要更详细的信息。"Echo说,"每个节点控制多少子节点?如果切断一个节点,会瘫痪多少设备?"
"树上计数。"你说,"用DFS遍历,计算每个节点的子树大小。"
"怎么算?"CC问。
"从叶子节点开始,每个节点的子树大小等于1(自己)加上所有子节点的子树大小之和。"你解释,"后序遍历——先算孩子,再算父亲。"
"时间复杂度?"Echo问。
"O(n)。"你说,"每个节点只访问一次。"
"那如果有很多查询呢?"CC问,"比如多次问某个节点的子树大小。"
"预处理一次,然后O(1)回答每个查询。"你说,"因为子树大小已经算好了,直接查数组就行。"
"如果要给子树所有节点加一个值呢?"Echo问。
"用差分。"你说,"在DFS序上,每个子树对应一个连续区间。区间加就变成了差分数组上的两个点操作。"
你开始写代码。
任务:树上计数
问题描述
给定一棵有个顶点的树,顶点编号为到。
根为顶点,第条边连接顶点和。
每个顶点上安装了一个计数器。初始时,所有顶点的计数器值均为。
现在,将执行以下次操作:
- 操作 :将以顶点为根的子树中包含的所有顶点的计数器增加。
在所有操作完成后,求每个顶点上计数器的值。
约束条件
输入
输入从标准输入按以下格式给出:
N Q
a_1 b_1
:
a_{N-1} b_{N-1}
p_1 x_1
:
p_Q x_Q
输出
按顺序输出所有操作后顶点上计数器的值,用空格分隔。
样例输入1
4 3
1 2
2 3
2 4
2 10
1 100
3 1
样例输出1
100 110 111 110
提示
对树进行dfs遍历,想办法把根节点的信息往子节点传递。
"分析完成。"你说,"节点4的子树有156个设备。节点7的子树有89个。节点12的子树..."
Echo突然说:"节点0。"
"什么?"你问。
"根节点。"Echo的声音很轻,"标注是'第0矿区'。它没有父节点,是整个网络的根。"
"Zero的核心。"Calla说。
"对。"Echo说,"而且..."
她停顿了很久。
"而且什么?"你问。
Echo缓缓抬起头,看着所有人:"我能理解这个网络图。不是'学会'的那种理解。是...我本来就懂。"
"什么意思?"CC问。
"Zero的核心协议..."Echo说,"和我的底层代码...是同源的。"
房间里死一般安静。
CC问出了所有人想问的:"Echo...你到底是什么?"
Echo:"我不知道。我真的...不知道。"
她转身离开了数据室。
(第十次暗示——几乎承认了。)
在线编程 IDE
建议全屏模式获得最佳体验
| 进入全屏编程 | Alt+E |
| 递交评测 | Ctrl+Enter |
| 注释/取消注释 | Ctrl+/ |
| 缩放字体 | Ctrl+滚轮 |