点权
题号:NC229893
时间限制:C/C++/Rust/Pascal 1秒,其他语言2秒
空间限制:C/C++/Rust/Pascal 256 M,其他语言512 M
64bit IO Format: %lld

题目描述

你有一棵 n 个点的树,每个点的点权可能是 ,初始均为 0,每条边均有一个正整数边权。现在你能进行两种操作:

1. 将一个度小于 2且权为 0 的点点权变为 2。该操作没有消耗。

2. 使一个点权为 2 的点点权变为 -1,并且让一个与其通过一条边连接,且点权 的点点权 。该操作的消耗为对应边边权。

对于每个点,求出让其点权变为 2 的最小消耗。如果不可能做到,输出 -1

输入描述:

第一行,一个正整数 n 表示点数。

接下来 n-1 行,每行三个正整数 u, v, c,表示 uv 之间有一条权值为 c 的边连接。()

对于  的数据,

输出描述:

一行 n 个整数,第 i 个数表示让 i 号节点的点权变为 2 的最小消耗。
示例1

输入

复制
5
1 2 1
1 3 2
2 4 3
2 5 4

输出

复制
10 7 0 0 0
示例2

输入

复制
6
1 2 3
2 3 4
3 4 5
4 5 1
4 6 2

输出

复制
0 -1 -1 3 0 0