CF1907G Lights

题目描述

一天结束时,Anna 需要关闭办公室里的所有灯。有 $n$ 盏灯和 $n$ 个开关,但它们的操作方式非常奇怪。第 $i$ 个开关会改变第 $i$ 盏灯的状态,同时也会改变另一盏灯 $a_i$ 的状态(改变状态指的是如果灯是亮的就变成灭的,反之亦然)。 请帮助 Anna 用最少的开关次数将所有灯都关掉,或者判断是否无法做到。

输入格式

输入的第一行包含一个整数 $t$($1 \le t \le 10^4$),表示测试用例的数量。接下来是每个测试用例的描述。 每个测试用例的第一行包含一个整数 $n$($2 \le n \le 10^5$),表示灯的数量。 第二行包含一个长度为 $n$ 的字符串,表示灯的初始状态。字符 "0" 表示对应的灯是关的,"1" 表示是开的。 第三行包含 $n$ 个整数 $a_i$($1 \le a_i \le n$,$a_i \neq i$),表示第 $i$ 个开关会改变第 $i$ 盏灯和第 $a_i$ 盏灯的状态。 保证所有测试用例中 $n$ 的总和不超过 $2 \times 10^5$。

输出格式

对于每个测试用例,输出一个整数 $k$,表示最少需要按下的开关次数,然后在下一行输出 $k$ 个开关的编号。 如果无法将所有灯都关掉,输出一个整数 $-1$。

说明/提示

由 ChatGPT 4.1 翻译