对每个结点u 维护两个量:
给定一棵以节点1 为根的树,树上共有n 个节点,其中某些节点被标记为“红点”。
定义某点 u的红点直径为:在u 的子树中,任取两个红点之间的最大距离(路径上经过的边数)。
如果子树中的红点数<2 ,则红点直径为 0。
请计算每个节点的红点直径。
第一行输入整数n(1≤n≤2×105) ,表示树的节点数。
第二行输入n个整数 ,其中c1,c2,...cn ,其中ci∈0,1表示红点,0表示非红点。
接下来n−1 行,每行输入两个整数u,v ,表示树上的一条无向边。
输出一行n 个整数,第i 个数表示以节点i 为根的子树的红点直径。
输入
5
0 1 0 1 1
1 2
1 3
1 4
4 5
输出
3 0 0 1 0