时间限制: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
说明
显然3,4号点只有1种颜色,故无法匹配,所以最大匹配为0.
对于2号点,颜色3有1个,颜色2有3个,所以最大匹配为1.
对于1号店,颜色1有3个,颜色2有5个,颜色3有1个,可以发现最大匹配为4.