题意
有两棵节点数均为 n 的有根树,你需要构造一个序列 (X_1,X_2,...,X_n)。使得对于每一棵树的每一个节点, 若令它所有的后代(包括它本身)为 (a_1,a_2,...,a_k),则都有 (abs(X_{a_1} + X_{a_2} +···+ X_{a_k}) = 1)。 判断是否可行,若可行输出一种可行方案。
做法
(-1equiv 1(mod~2)),这启示我们将(a_i)赋为({-1,0,1})
根据儿子的数量可确定一个点的奇偶性
显然得两树各点的奇偶性均相同才有可能行
有个更强的结论是:奇偶性相同一定能构造出可行方案
这样构造:将所有奇点在两棵树上对应位置连边,建立一个虚点连向两棵树根节点,保留原来的边;跑欧拉回路,对于一条路径,我们设立方向(本身一条路径是没有方向的);若存在某奇点第一棵树跑向第二棵树,设为(-1),否则设为(1),所以偶点设为(0)
定义横叉边为两棵树间的边
将欧拉回路拆成若干个有向环。
1类环表示从当前节点向儿子走,然后又从儿子走回当前点
2类环表示从当前节点向儿子走,从父亲边走回当前点(反向也是一样的)
3类环表示从当前节点向父亲边或横叉边走,又从这两个中另一个走回来
4类环表示从当前节点向儿子走,从横叉边走回当前点(反向也是一样的)
这样拆分的好处是可以发现一个环上各点和为(0),然后分奇偶点简单讨论一下就可以了。这里不详细展开,可以看这里