时间限制:C/C++/Rust/Pascal 2秒,其他语言4秒
空间限制:C/C++/Rust/Pascal 256 M,其他语言512 M
64bit IO Format: %lld
题目描述
给定一个以

为根有

个节点的树。在

次询问中,每次给你两个集合

,请你判断是否

中是否存在一个节点是

集合所有点的祖先?
让我们回忆一下祖先的定义~:一个结点到根结点的路径上,除了它本身外的结点。
根结点的祖先集合为空。
输入描述:
第一行两个正整数
表示树的大小和询问的数量。
第二行
个正整数,依次表示2号点到n号点的父亲的编号。
接下来是
次询问,在每次询问中:
首先是两个正整数表示
集合的大小。
接下来一行
个正整数表示集合
中的节点编号。
接下来一行
个正整数表示集合
中的节点编号。


题目保证集合

中给出的节点编号都在

到

的范围内,且每次询问中两个集合内部的点不重复。
输出描述:
输出
行每行一个字符串:如果存在则输出一个字符串"yes",如果不存在则输出一个字符串"no"(不输出引号)。
示例1
输入
复制
3 2
1 1
2 1
2 3
1
3 1
1 2 3
1
说明
树长这样:
第一次集合A为{2,3},集合B为{1},1是2和3号点的祖先,所以输出yes
第二次集合A为{1,2,3},集合B为{1},1是2和3号点的祖先但是不是1的祖先,所以输出no