SZTG-NOIP-U1388. Tree Queries

提交0 通过1
通过率0%
时间限制2000ms
内存限制256MiB

题目描述

题目描述

给定一棵有根树,由 n n 个顶点组成,顶点编号从 1 1 到 n n 。树的根是编号为 1 1 的顶点。

树是一个有 n−1 n-1 条边的连通无向图。

给定 m m 个询问。第 i i 个询问由 ki k_i 个互不相同的顶点组成:vi[1],vi[2],…,vi[ki] v_i[1], v_i[2], \dots, v_i[k_i] 。你的任务是判断,是否存在一条从根到某个顶点 u u 的路径,使得给定的每个 k k 个顶点要么属于这条路径,要么到这条路径上的某个顶点的距离为 1 1 。

输入格式

输入的第一行包含两个整数 n n 和 m m (2≤n≤2⋅105 2 \le n \le 2 \cdot 10^5 ,1≤m≤2⋅105 1 \le m \le 2 \cdot 10^5 )——树中顶点的数量和询问的数量。

接下来的 n−1 n-1 行,每行描述树的一条边。第 i i 条边由两个整数 ui u_i 和 vi v_i 表示,即它连接的两个顶点的编号 (1≤ui,vi≤n,ui≠vi (1 \le u_i, v_i \le n, u_i \ne v_i )。

保证给定的边构成一棵树。

接下来的 m m 行描述询问。第 i i 行描述第 i i 个询问,并以整数 ki k_i (1≤ki≤n 1 \le k_i \le n )开头——表示当前询问中顶点的数量。随后给出 ki k_i 个整数:vi[1],vi[2],…,vi[ki] v_i[1], v_i[2], \dots, v_i[k_i] (1≤vi[j]≤n 1 \le v_i[j] \le n ),其中 vi[j] v_i[j] 表示第 i i 个询问中的第 j j 个顶点。

保证单个询问中的所有顶点互不相同。

保证所有 ki k_i 的总和不超过 2⋅105 2 \cdot 10^5 (∑i=1mki≤2⋅105 \sum\limits_{i=1}^{m} k_i \le 2 \cdot 10^5 )。

输出格式

对于每个询问,输出答案——如果存在一条从根到某个顶点 u u 的路径,使得给定的每个 k k 个顶点要么属于这条路径,要么到这条路径上的某个顶点的距离为 1 1 ,则输出 "YES";否则输出 "NO"。

10 6
1 2
1 3
1 4
2 5
2 6
3 7
7 8
7 9
9 10
4 3 8 9 10
3 2 4 6
3 2 1 5
3 4 8 2
2 6 10
3 5 4 7
YES
YES
YES
YES
NO
NO

提示

与样例对应的图片:

考虑这些询问。

第一个询问是 [3,8,9,10] [3, 8, 9, 10] 。答案是 "YES",因为你可以选择从根 1 1 到顶点 u=10 u=10 的路径。此时顶点 [3,9,10] [3, 9, 10] 属于从 1 1 到 10 10 的路径,而顶点 8 8 到顶点 7 7 的距离为 1 1 ,且顶点 7 7 也属于这条路径。

第二个询问是 [2,4,6] [2, 4, 6] 。答案是 "YES",因为你可以选择到顶点 u=2 u=2 的路径。此时顶点 4 4 到顶点 1 1 的距离为 1 1 ,且顶点 1 1 属于这条路径;顶点 6 6 到顶点 2 2 的距离为 1 1 ,且顶点 2 2 属于这条路径。

第三个询问是 [2,1,5] [2, 1, 5] 。答案是 "YES",因为你可以选择到顶点 u=5 u=5 的路径,并且询问中的所有顶点都属于这条路径。

第四个询问是 [4,8,2] [4, 8, 2] 。答案是 "YES",因为你可以选择到顶点 u=9 u=9 的路径,所以顶点 2 2 和 4 4 到顶点 1 1 的距离都为 1 1 ,且顶点 1 1 属于这条路径;顶点 8 8 到顶点 7 7 的距离为 1 1 ,且顶点 7 7 属于这条路径。

第五个和第六个询问的答案都是 "NO",因为你无法选择合适的顶点 u u 。