题目描述
有一棵有 N 个顶点的有根树,顶点编号为 1 到 N。顶点 1 是根节点,对于每个 i (2≤i≤N),顶点 i 的父节点是顶点 Pi。
每个顶点上放有一枚正反两面的硬币,共 N 枚。
此外,有 N 个编号为 1 到 N 的按钮。按下按钮 n 时,以 n 为根的子树内所有顶点上的硬币都会被翻面。
现在需要处理 Q 个如下描述的查询。
对于第 i 个查询,给定一个大小为 Mi 的顶点集合 Si={vi,1,vi,2,…,vi,Mi}。
此时,Si 中的顶点上的硬币为正面,其余顶点上的硬币为反面。你可以多次选择一个按钮按下,每次操作后所有被影响的硬币都会翻面。请问,最少需要按多少次按钮,才能使所有 N 枚硬币都变为反面?如果无论如何都无法全部变为反面,请输出 −1。
输入格式
输入按以下格式从标准输入读入。
N Q
P2 P3 … PN
M1 v1,1 v1,2 … v1,M1
M2 v2,1 v2,2 … v2,M2
⋮
MQ vQ,1 vQ,2 … vQ,MQ
输出格式
输出 Q 行,第 i 行输出第 i 个查询的答案。
样例 1
输入
6 6
1 1 2 2 5
6 1 2 3 4 5 6
3 2 5 6
1 3
3 1 2 3
3 4 5 6
4 2 3 4 5
输出
1
2
1
3
2
3
说明/提示
数据范围
- 2≤N≤2×105
- 1≤Pi<i
- 1≤Q≤2×105
- 1≤Mi
- i=1∑QMi≤2×105
- 1≤vi,j≤N
- vi,1,vi,2,…,vi,Mi 互不相同
- 所有输入均为整数
样例解释 1
对于第 1 个查询,如下操作只需按 1 次按钮即可满足条件,且这是最小次数。
- 按下按钮 1。顶点 1,2,3,4,5,6 上的硬币被翻面。
对于第 2 个查询,如下操作只需按 2 次按钮即可满足条件,且这是最小次数。
- 按下按钮 4。顶点 4 上的硬币被翻面。
- 按下按钮 2。顶点 2,4,5,6 上的硬币被翻面。
由 ChatGPT 4.1 翻译