旗鼓相当的对手
时间限制:C/C++/Rust/Pascal 1秒,其他语言2秒
空间限制:C/C++/Rust/Pascal 512 M,其他语言1024 M
64bit IO Format: %lld

题目描述

现在有个炉石玩家被挂在一棵有根树上,树根节点的标号是.树是一种有个点且有条边的结构, 并且一棵树保证没有环.
个点的每个点上都有一个炉石玩家,并且每个炉石玩家都有一个战力值为.对于树上的每一位炉石玩家,都有一棵属于他的子树,我们定义两个节点之间的距离为两个节点之间最短路径经过的边数.对于一个给定的值,如果满足,我们就说旗鼓相当.表示树上节点通过最短的路径到达节点所经过的边的数量.
现在需要统计每个炉石玩家的值,值的计算方式是这样的,对于炉石玩家的子树中的所有节点,如果是旗鼓相当的,并且的最近公共祖先是且满足,那么就会增加.

输入描述:

第一行两个整数,意义和题面给定的一致.
第二行个整数表示战力值.
接下来行每行两个数表示之间有一条边.

输出描述:

一行输出个整数表示每个炉石玩家的.按照标号顺序输出.
示例1

输入

复制
3 2
1 2 3
1 2
1 3

输出

复制
5 0 0

备注: