组合树
时间限制:1秒 内存限制:256M
【问题描述】
Bob想要和Carrol玩游戏。但Carrol觉得玩游戏太无聊,就和Tuesday去写歌了。于是现在Bob来找你玩游戏。
这个游戏是这样的:给定一棵 \(n\) 个节点的树, 1 号点为根节点,设 \(v\) 的父亲是 \(f(v)\) 。其中每个节点有一个颜色,要么是黑色,要么是白色。不妨记第 \(i\) 个节点的初始颜色是 \(c_i\)。\(c_i =0\) 或 \(1\),表示黑色或白色。
在游戏开始时,Bob为每个节点选择一个目标颜色 \(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\) 个节点均存在,你才能执行这样的操作。当然,你可以执行任意多次操作。
现在Bob要和你玩 \(T\) 次这样的游戏,每次你都想要知道你是否有可能完成要求,即通过若干次操作,将所有节点变成其目标颜色。
【输入格式】
第一行仅一个数 \(T≤10\),表示这样的游戏的次数;
接下来共有 \(T\) 组数据。对于每一组数据:
第一行是两个正整数 \(n,k\),\(n\) 表示树的大小,\(k\) 的含义请参见题目描述。数据满足 \(n,k≤2×10^5\)。
接下来 \(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 。
【输入输出样例】
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
【输入输出样例解释】
在第一个例子中,第一次选择 2 号点操作,1,2 号点被翻转;第二次选择 3 号点操作,2,3 号点被翻转。即达成目标状态。 可以证明,无法将初始状态经过操作变为目标状态。
【数据限制】
对于 \(10\%\) 的数据,满足:\(1 ≤ n ≤ 5\)。
对于 \(30\%\) 的数据,满足:\(1 ≤ n ≤ 20\)。
对于 \(50\%\) 的数据,满足:\(1 ≤ n ≤ 2000\)。
对于 \(70\%\) 的数据,满足:\(1 ≤ n ≤ 50000\)。
对于 \(100\%\) 的数据,满足:\(1 ≤ n ≤ 200000\)。
【来源】
Mr.he