#P17530. PM13185树上滑块谜题

PM13185树上滑块谜题

题目描述

有一棵包含 NN 个节点的树,节点编号为 0,1,,N10,1,\ldots,N-1。节点 00 是根。对于每个 i>0i>0,节点 ii 与节点 parentiparent_i 之间有一条边。

初始时,节点 00 上放有一个红色棋子,另外一些节点上放有黑色棋子。每个节点至多放一个棋子。数组 tokentoken 描述初始状态:tokeni=1token_i=1 表示节点 ii 上有棋子,tokeni=0token_i=0 表示该节点为空。保证 token0=1token_0=1,且节点 00 上的棋子就是红色棋子。

一次操作中,如果一个有棋子的节点与一个空节点相邻,你可以把该棋子沿边滑到这个空节点上。

对于每个节点 ii,请判断是否存在某个合法操作序列,使红色棋子最终到达节点 ii

输入格式

第一行输入一个整数 NN

接下来 NN 行,第 i+1i+1 行输入两个整数 parenti,tokeniparent_i,token_i

其中 parent0=1parent_0=-1,其余 parentiparent_i 表示节点 ii 的父亲;tokeni{0,1}token_i\in\{0,1\} 表示节点 ii 初始是否有棋子。

输出格式

第一行输出整数 NN

第二行输出 NN 个整数 ans0,ans1,,ansN1ans_0,ans_1,\ldots,ans_{N-1}。若红色棋子可以到达节点 ii,则 ansi=1ans_i=1,否则 ansi=0ans_i=0

数据范围

2N3002\le N\le300

parent0=1parent_0=-1;对于每个 i>0i>0,有 0parenti<i0\le parent_i<i

token0=1token_0=1,并且对每个 i>0i>0tokeni{0,1}token_i\in\{0,1\}

样例

输入

5
-1 1
0 1
0 0
0 0
1 1

输出

5
1 1 1 1 0