月出皎兮,佼人僚兮。
时间限制:C/C++/Rust/Pascal 1秒,其他语言2秒
空间限制:C/C++/Rust/Pascal 256 M,其他语言512 M
64bit IO Format: %lld

题目描述

月出皎兮。佼人僚兮。舒窈纠兮。劳心悄兮。

 机缘巧合之下,一女误入诗经之境。少女在桥上,望尽千里壮阔千山。只见画面瞬转,忽不慎跌入荷塘深处,左右尽是海草纠缠。少女心中惶惶,只见水中突然横现一行字,写着“
    给一棵树有n个节点,根节点为1。
    每个点有一个颜色,并且有一个权值,为当前这个节点颜色的数量。
    对每个点输出,当前点以及子树中的最大匹配数。
    当且仅当颜色不同可以匹配。
”。
你可以解救被困水中的少女吗?

比如:
颜色1的权值和为3,颜色2的权值和为2,那么最大匹配数就是2。
颜色1的权值和为3,颜色2的权值和为2,颜色3的权值和为1,那么最大匹配数就是3。


输入描述:

第一行输入一个n,代表树的节点个数。
接下来输入n-1行,每行2个数:u,v代表存在一条u到v的边。保证树连通。
接下来输入n行,每行2个数:x,y,代表点i的颜色和数量。
节点个数1<=n<=2e5
颜色总数1<=x<=2e5
每个点的数量1<=y<=1e3

输出描述:

输出有n行,从1到n分别代表当前点以及子树中的最大匹配。
示例1

输入

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

输出

复制
4
1
0
0

说明

显然3,4号点只有1种颜色,故无法匹配,所以最大匹配为0.
对于2号点,颜色3有1个,颜色2有3个,所以最大匹配为1.
对于1号店,颜色1有3个,颜色2有5个,颜色3有1个,可以发现最大匹配为4.