AT_arc148_c [ARC148C] Lights Out on Tree

题目描述

有一棵有 $N$ 个顶点的有根树,顶点编号为 $1$ 到 $N$。顶点 $1$ 是根节点,对于每个 $i$ $(2 \leq i \leq N)$,顶点 $i$ 的父节点是顶点 $P_i$。 每个顶点上放有一枚正反两面的硬币,共 $N$ 枚。 此外,有 $N$ 个编号为 $1$ 到 $N$ 的按钮。按下按钮 $n$ 时,以 $n$ 为根的子树内所有顶点上的硬币都会被翻面。 现在需要处理 $Q$ 个如下描述的查询。 对于第 $i$ 个查询,给定一个大小为 $M_i$ 的顶点集合 $S_i = \{ v_{i,1}, v_{i,2}, \dots, v_{i,M_i} \}$。 此时,$S_i$ 中的顶点上的硬币为正面,其余顶点上的硬币为反面。你可以多次选择一个按钮按下,每次操作后所有被影响的硬币都会翻面。请问,最少需要按多少次按钮,才能使所有 $N$ 枚硬币都变为反面?如果无论如何都无法全部变为反面,请输出 $-1$。

输入格式

输入按以下格式从标准输入读入。 > $N$ $Q$ > $P_2$ $P_3$ $\dots$ $P_N$ > $M_1$ $v_{1,1}$ $v_{1,2}$ $\dots$ $v_{1,M_1}$ > $M_2$ $v_{2,1}$ $v_{2,2}$ $\dots$ $v_{2,M_2}$ > $\vdots$ > $M_Q$ $v_{Q,1}$ $v_{Q,2}$ $\dots$ $v_{Q,M_Q}$

输出格式

输出 $Q$ 行,第 $i$ 行输出第 $i$ 个查询的答案。

说明/提示

### 数据范围 - $2 \leq N \leq 2 \times 10^5$ - $1 \leq P_i < i$ - $1 \leq Q \leq 2 \times 10^5$ - $1 \leq M_i$ - $\displaystyle \sum_{i=1}^Q M_i \leq 2 \times 10^5$ - $1 \leq v_{i,j} \leq N$ - $v_{i,1}, v_{i,2}, \dots, v_{i,M_i}$ 互不相同 - 所有输入均为整数 ### 样例解释 1 对于第 $1$ 个查询,如下操作只需按 $1$ 次按钮即可满足条件,且这是最小次数。 - 按下按钮 $1$。顶点 $1,2,3,4,5,6$ 上的硬币被翻面。 对于第 $2$ 个查询,如下操作只需按 $2$ 次按钮即可满足条件,且这是最小次数。 - 按下按钮 $4$。顶点 $4$ 上的硬币被翻面。 - 按下按钮 $2$。顶点 $2,4,5,6$ 上的硬币被翻面。 由 ChatGPT 4.1 翻译