CF1833E Round Dance

题目描述

有 $n$ 个人来到节日现场,决定跳几支圆圈舞。每支圆圈舞至少有 $2$ 个人,并且每个人恰好有两个邻居。如果一支圆圈舞中只有 $2$ 个人,那么他们的左右邻居是同一个人。 你想知道到底有多少支圆圈舞。但每位参与者只记得自己的一位邻居。你的任务是确定可能的圆圈舞的最小和最大数量。 例如,如果节日现场有 $6$ 个人,每个人记得的邻居编号为 $[2, 1, 4, 3, 6, 5]$,那么圆圈舞的最小数量是 $1$: - $1 - 2 - 3 - 4 - 5 - 6 - 1$ 最大数量是 $3$: - $1 - 2 - 1$ - $3 - 4 - 3$ - $5 - 6 - 5$

输入格式

第一行包含一个正整数 $t$($1 \le t \le 10^4$),表示测试用例的数量。接下来是每个测试用例的描述。 每个测试用例的第一行包含一个正整数 $n$($2 \le n \le 2 \cdot 10^5$),表示节日现场的人数。 每个测试用例的第二行包含 $n$ 个整数 $a_i$($1 \le a_i \le n, a_i \neq i$),表示第 $i$ 个人记得的邻居的编号。 保证所有测试用例都是合法的,并且对应至少一种将人分成圆圈舞的方式。 保证所有测试用例中 $n$ 的总和不超过 $2 \cdot 10^5$。

输出格式

对于每个测试用例,输出两个整数,表示可能的圆圈舞的最小和最大数量。

说明/提示

由 ChatGPT 4.1 翻译