CF755C PolandBall and Forest
题目描述
PolandBall 和他的家人生活在森林里。森林里有一些树。树是无向无环图,包含 $k$ 个顶点和 $k-1$ 条边,其中 $k$ 是某个整数。请注意,一个顶点也是一个有效的树。
在每棵树的每个顶点上恰好有一位亲戚居住,他们的编号从 $1$ 到 $n$,且每个人的编号唯一。对于每一个 Ball $i$,你都知道与它在同一棵树上距离最远的那位亲戚的编号。如果有多位距离同样最远的亲戚,只会给出这些中编号最小的那一位。
请问森林中有多少棵树?
输入格式
第一行包含一个整数 $n$($1 \leq n \leq 10^4$)——居住在森林中的 Ball 的数量。
第二行包含一个长度为 $n$ 的序列 $p_1, p_2, ..., p_n$,其中 $1 \leq p_i \leq n$,$p_i$ 表示在与 Ball $i$ 同一棵树上距离最远的亲戚的编号。如果有多个最远的亲戚,则 $p_i$ 是这些中编号最小的一个。
保证该序列 $p$ 对应某个合法的森林。
Hack:如果你要 Hack 别人,你需要给出一个合法的森林作为测试。$p$ 序列会根据你提供的森林自动计算,然后作为输入给被 Hack 的代码。格式如下:
第一行输出整数 $n$($1 \leq n \leq 10^4$)——Ball 的数量,以及整数 $m$($0 \leq m < n$)——森林中的总边数。接下来 $m$ 行,每行输出两个整数 $a_i$ 和 $b_i$,表示 $a_i$ 和 $b_i$ 所在的顶点之间有一条边。例如,第一组样例可写作:
`
5 3
1 2
3 4
4 5
`
5 3
1 2
3 4
4 5
`
输出格式
你需要输出 PolandBall 生活的森林中树的数量。
说明/提示
在第一组样例中,可能的森林为:1-2、3-4-5。
总共有 $2$ 棵树。
在第二组样例中,唯一可能的图就是一个顶点且没有边,所以只有一棵树。
由 ChatGPT 5 翻译