#SDP01. 文件系统

文件系统

题目描述

在操作系统的文件资源管理器中,我们经常需要查看某个文件夹占用了多少磁盘空间。为了简化模型,我们将文件系统抽象为一棵有根树,每个节点都有一个大小 sis_i:目录节点大小为 00,文件节点大小为正整数。

现在给定这棵树的结构,请你计算并输出每个节点所占用的磁盘空间:

  • 如果节点是目录节点,则输出该目录下所有文件(即其子树中所有叶子节点)的大小之和。
  • 如果节点是文件节点,则输出其本身的大小。

输入格式

第一行一个整数 nn,表示节点数量。
接下来 n1n - 1 行,每行包含三个整数 u,v,svu, v, s_v,表示节点 uu 是节点 vv 的父节点,且节点 vv 的大小为 svs_v

  • vv 是目录节点,则 sv=0s_v = 0
  • vv 是文件节点,则 svs_v 为其文件大小(正整数)。

保证所有边构成以节点 11 为根的有向树。

输出格式

输出一行 nn 个整数,用空格分隔,第 ii 个数表示节点 ii 的实际占用大小。

5
1 2 0
1 3 0
2 4 100
2 5 200
300 300 0 100 200

数据规模与约定

样例说明

  • 节点 4、5 为文件节点,大小分别为 100、200。
  • 节点 2 为目录节点,其子树中文件总大小为 100 + 200 = 300。
  • 节点 3 为空目录,因此占用大小为 0。
  • 节点 1 为根目录,其子树中文件总大小为 100 + 200 = 300。

数据范围

  • 1n1051 \le n \le 10^5

  • 对于所有文件节点,1sv1091 \le s_v \le 10^9

  • 对于所有目录节点,sv=0s_v = 0