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 翻译