黑白树游戏
测试数据来自 system/1465
时间限制:1秒 内存限制:256M
【问题描述】
黑白树游戏是这样的:
给定一棵 \(n\) 个节点的树(编号 \(1~n\) ),\(1\) 号点为根节点,设 \(v\) 的父亲是 \(f(v)\) 。其中每个节点有一个颜色,要么是黑色,要么是白色。不妨记第 \(i\) 个节点的初始颜色是 \(c_i\),\(c_i=0\) 或 \(c_i=1\),表示黑色或白色。
在游戏开始时,为每个节点选择一个目标颜色 \(d_i\),要求你经过若干次操作,将每个节点变成其目标颜色。你的操作是这样的:
选定一个点 \(u\),将 \(u,f(u),f(f(u)),…,f_{k-1}(u)\) 这 \(k\) 个节点的颜色翻转(将白色节点变为黑色节点,将黑色节点变为白色节点)。其中 \(k\) 是游戏开始前确定的一个正整数。只有 \(u,f(u),f(f(u)),…,f_{k-1}(u)\) 这 \(k\) 个节点均存在,你才能执行这样的操作。当然,你可以执行任意多次操作。
现在小H要和你玩 \(T\) 次这样的游戏,每次你都想要知道你是否有可能完成要求,即通过若干次操作,将所有节点变成其目标颜色。
【输入格式】
输入文件的第一行仅一个数 \(T\),表示这样的游戏的次数;
接下来共有T组数据。对于每一组数据:
第一行是两个正整数 \(n,k\),\(n\) 表示树的大小,\(k\) 的含义请参见【题目描述】。
接下来 \(n-1\) 行每行两个数 \(u,v\),表示树上有一条边 \((u,v)\)。注意:输入并不保证边的方向。
接下来一行 \(n\) 个数 \(c_1,c_2,…,c_n\),表示初始颜色。
接下来一行 \(n\) 个数 \(d_1,d_2,…,d_n\),表示目标颜色。
【输出格式】
输出包含 \(T\) 行,第 \(i\) 行对应第 \(i\) 次游戏的答案,对于第 \(i\) 次游戏,如果你有可能完成任务,输出Yes,否则输出No。
【输入输出样例1】
Input
2
3 2
1 2
2 3
0 0 0
1 0 1
3 2
1 2
2 3
0 0 0
1 1 1
Output
Yes
No
【输入输出样例1说明】
在第一个例子中,第一次选择2号点操作,1,2号点被翻转;第二次选择3号点操作,2,3号点被翻转。即达成目标状态。
可以证明,无法将初始状态经过操作变为目标状态。
【数据说明】
对于全部测试点:\(T ≤ 10 , k ≤ n ≤ 2×10^5\),保证数据给出的是一棵树。
对于 \(10\%\) 的数据,\(n ≤ 5\)
对于 \(30\%\) 的数据,\(n ≤ 20\)
对于 \(50\%\) 的数据,\(n ≤ 2000\)
对于 \(70\%\) 的数据,\(n ≤ 500000\)
对于 \(100\%\) 的数据,\(n ≤ 10^5\)
【来源】
Mr.he