CF1833E.Round Dance

传统题 时间 2000 ms 内存 256 MiB 8 尝试 3 已通过 1 标签

Round Dance

题目描述

nn 个人来到节日现场,决定跳几支圆圈舞。每支圆圈舞至少有 22 个人,并且每个人恰好有两个邻居。如果一支圆圈舞中只有 22 个人,那么他们的左右邻居是同一个人。

你想知道到底有多少支圆圈舞。但每位参与者只记得自己的一位邻居。你的任务是确定可能的圆圈舞的最小和最大数量。

例如,如果节日现场有 66 个人,每个人记得的邻居编号为 [2,1,4,3,6,5][2, 1, 4, 3, 6, 5],那么圆圈舞的最小数量是 11

  • 12345611 - 2 - 3 - 4 - 5 - 6 - 1

最大数量是 33

  • 1211 - 2 - 1
  • 3433 - 4 - 3
  • 5655 - 6 - 5

输入格式

第一行包含一个正整数 tt1t1041 \le t \le 10^4),表示测试用例的数量。接下来是每个测试用例的描述。

每个测试用例的第一行包含一个正整数 nn2n21052 \le n \le 2 \cdot 10^5),表示节日现场的人数。

每个测试用例的第二行包含 nn 个整数 aia_i1ain,aii1 \le a_i \le n, a_i \neq i),表示第 ii 个人记得的邻居的编号。

保证所有测试用例都是合法的,并且对应至少一种将人分成圆圈舞的方式。

保证所有测试用例中 nn 的总和不超过 21052 \cdot 10^5

输出格式

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

说明/提示

由 ChatGPT 4.1 翻译

样例

10
6
2 1 4 3 6 5
6
2 3 1 5 6 4
9
2 3 2 5 6 5 8 9 8
2
2 1
4
4 3 2 1
5
2 3 4 5 1
6
5 3 4 1 1 2
5
3 5 4 1 2
6
6 3 2 5 4 3
6
5 1 4 3 4 2
1 3
2 2
1 3
1 1
1 2
1 1
1 1
2 2
1 2
1 1

在线编程 IDE

建议全屏模式获得最佳体验