AT_nomura2020_d Urban Planning
题目描述
有 $N$ 个编号为 $1, 2, \cdots, N$ 的城镇。
现在计划修建若干条双向道路,每条道路连接两个不同的城镇。目前,城镇之间还没有任何道路。
在这个计划中,每个城镇都要求选择另一个城镇,并且希望能够通过一条或多条道路到达所选的城镇。
$N$ 个城镇的要求用数组 $P_1, P_2, \cdots, P_N$ 表示。对于城镇 $i$,如果 $P_i = -1$,表示尚未决定要到达哪个城镇;如果 $1 \leq P_i \leq N$,则表示选择了城镇 $P_i$ 作为目标。
设 $P_i = -1$ 的城镇有 $K$ 个,则总共有 $(N-1)^K$ 种不同的要求方式。对于每一种要求方式,求出满足所有城镇要求所需修建道路数的最小值,并将这些最小值的总和对 $10^9+7$ 取模后输出。
输入格式
输入通过标准输入给出,格式如下:
> $N$ $P_1$ $P_2$ $\cdots$ $P_N$
输出格式
对于每一种要求方式,求出满足所有城镇要求所需修建道路数的最小值,将这些最小值的总和对 $10^9+7$ 取模后输出。
说明/提示
## 限制条件
- $2 \leq N \leq 5000$
- $P_i = -1$ 或 $1 \leq P_i \leq N$
- $P_i \neq i$
- 所有输入均为整数
## 样例解释 1
存在如下 $3$ 种要求方式:
- $P_1=2, P_2=1, P_3=1, P_4=3$。此时,例如修建道路 $(1,2), (1,3), (3,4)$ 共 $3$ 条,可以满足所有城镇的要求,并且这是最小值。
- $P_1=2, P_2=1, P_3=2, P_4=3$。此时,例如修建道路 $(1,2), (1,3), (3,4)$ 共 $3$ 条,可以满足所有城镇的要求,并且这是最小值。
- $P_1=2, P_2=1, P_3=4, P_4=3$。此时,例如修建道路 $(1,2), (3,4)$ 共 $2$ 条,可以满足所有城镇的要求,并且这是最小值。
注意,并不一定需要直接连接城镇 $i$ 和 $P_i$。
因此,总和为 $8$。
## 样例解释 2
有时一开始所有要求就已经确定,只存在 $1$ 种方式。
由 ChatGPT 4.1 翻译