atcoder#AGC018F. [AGC018F] Two Trees

[AGC018F] Two Trees

题目描述

N N 頂点からなる根付き木が 2 2 つあります。 どちらの木の頂点も、それぞれ 1 1 から N N の番号がついています。 1 1 つめの木の 頂点 i i の親は Ai A_i です。 なお、頂点 i i が根のときは、Ai=1 A_i=-1 です。 2 2 つめの木の 頂点 i i の親は Bi B_i です。 なお、頂点 i i が根のときは、Bi=1 B_i=-1 です。

すぬけ君は、長さ N N の整数列 X1 X_1 , X2 X_2 , ... ... , XN X_N であって、次の条件を満たすものを求めたいです。

  • どちらの木のどの頂点についても、その頂点とその子孫の頂点の番号を a1 a_1 , a2 a_2 , ... ... , ak a_k としたとき、 abs(Xa1 + Xa2 + ... + Xak)=1 abs(X_{a_1}\ +\ X_{a_2}\ +\ ...\ +\ X_{a_k})=1 が成り立つ。

条件を満たす整数列を作ることができるか判定し、存在するならば 1 1 つ求めてください。

输入格式

入力は以下の形式で標準入力から与えられる。

N N A1 A_1 A2 A_2 .. .. AN A_N B1 B_1 B2 B_2 .. .. BN B_N

输出格式

条件を満たす整数列を作ることができない場合は、IMPOSSIBLE と出力せよ。 作ることができる場合は、まず 1 1 行目に、POSSIBLE と出力せよ。 続いて、2 2 行目には条件を満たす整数列 X1 X_1 , X2 X_2 , ... ... , XN X_N を空白区切りで出力せよ。

题目大意

给定两棵都是NN个节点的有根树A,BA,B,节点均从1..N1..N标号。

我们需要给每个标号定一个权值,使在两棵树上均满足任意节点子树权值和为111-1

输出任意一种解,需要判断无解 N100000N\leqslant 100000

5
3 3 4 -1 4
4 4 1 -1 1
POSSIBLE
1 -1 -1 3 -1
6
-1 5 1 5 1 3
6 5 5 3 -1 3
IMPOSSIBLE
8
2 7 1 2 2 1 -1 4
4 -1 4 7 4 4 2 4
POSSIBLE
1 2 -1 0 -1 1 0 -1

提示

制約

  • 1  N  105 1\ \leq\ N\ \leq\ 10^5
  • 1  Ai  N 1\ \leq\ A_i\ \leq\ N (頂点 i i 1 1 つ目の木の根でないとき)
  • Ai = 1 A_i\ =\ -1 (頂点 i i 1 1 つ目の木の根のとき)
  • 1  Bi  N 1\ \leq\ B_i\ \leq\ N (頂点 i i 2 2 つ目の木の根でないとき)
  • Bi = 1 B_i\ =\ -1 (頂点 i i 2 2 つ目の木の根のとき)
  • 入力はvalidな根付き木である。

Sample Explanation 1

例えば、1 1 つ目の木の頂点 3 3 について見てみると、その頂点と子孫の頂点の番号は、3,1,2 3,1,2 となっています。 出力例のように整数列を設定すると、abs(X3+X1+X2)=abs((1)+(1)+(1))=abs(1)=1 abs(X_3+X_1+X_2)=abs((-1)+(1)+(-1))=abs(-1)=1 となっており、問題ありません。 他の頂点についても同じように確かめると、確かに出力例の整数列は条件を満たしています。

Sample Explanation 2

この例では、どうやっても条件を満たす整数列は作れません。 よって、この例の答えは IMPOSSIBLE になります。