2019 年海淀区青少年程序设计挑战活动复赛初中组C++语言试题第四题
输入文件:tree.in
输出文件:tree.out
时间限制:4s
空间限制:512MB
【题目描述】
Bob想要和Carrol玩游戏。但Carrol觉得玩游戏太无聊,就和Tuesday去写歌了。于是现在Bob来找你玩游戏。
这个游戏是这样的:给定一棵n个节点的树, 1号点为根节点,设v的父亲是f(v) 。其中每个节点有一个颜色,要么是黑色,要么是白色。不妨记第i个节点的初始颜色是ci。ci =0或1,表示黑色或白色。
在游戏开始时,Bob为每个节点选择一个目标颜色di,要求你经过若干次操作,将每个节点变成其目标颜色。你的操作是这样的:
●选定一个点u,将u,f(u),f(f(u)),…,fk-1 (u)这k个节点的颜色翻转(将白色节点变为黑色节点,将黑色节点变为白色节点)。其中k是游戏开始前确定的一个正整数。
只有u,f(u),f(f(u)),…,fk-1 (u)这k个节点均存在,你才能执行这样的操作。当然,你可以执行任意多次操作。
现在Bob要和你玩T次这样的游戏,每次你都想要知道你是否有可能完成要求,即通过若干次操作,将所有节点变成其目标颜色。**
【输入说明】
●第一行仅一个数T≤10,表示这样的游戏的次数;
●接下来共有T组数据。对于每一组数据:
○第一行是两个正整数n,k