AT_nomura2020_d.Urban Planning

NOI/NOI+/CTSC

通过率:0%

AC君温馨提醒

该题目为【atcoder】题库的题目,您提交的代码将被提交至atcoder进行远程评测,并由ACGO抓取测评结果后进行展示。由于远程测评的测评机由其他平台提供,我们无法保证该服务的稳定性,若提交后无反应,请等待一段时间后再进行重试。

题目描述

有 NN 个编号为 1,2,⋯ ,N1, 2, \cdots, N 的城镇。

现在计划修建若干条双向道路,每条道路连接两个不同的城镇。目前,城镇之间还没有任何道路。

在这个计划中,每个城镇都要求选择另一个城镇,并且希望能够通过一条或多条道路到达所选的城镇。

NN 个城镇的要求用数组 P1,P2,⋯ ,PNP_1, P_2, \cdots, P_N 表示。对于城镇 ii,如果 Pi=−1P_i = -1,表示尚未决定要到达哪个城镇;如果 1≤Pi≤N1 \leq P_i \leq N,则表示选择了城镇 PiP_i 作为目标。

设 Pi=−1P_i = -1 的城镇有 KK 个,则总共有 (N−1)K(N-1)^K 种不同的要求方式。对于每一种要求方式,求出满足所有城镇要求所需修建道路数的最小值,并将这些最小值的总和对 109+710^9+7 取模后输出。

输入格式

输入通过标准输入给出,格式如下:

NN P1P_1 P2P_2 ⋯\cdots PNP_N

输出格式

对于每一种要求方式,求出满足所有城镇要求所需修建道路数的最小值,将这些最小值的总和对 109+710^9+7 取模后输出。

输入输出样例

  • 输入#1

    4
    2 1 -1 3

    输出#1

    8
  • 输入#2

    2
    2 1

    输出#2

    1
  • 输入#3

    10
    2 6 9 -1 6 9 -1 -1 -1 -1

    输出#3

    527841

说明/提示

限制条件

  • 2≤N≤50002 \leq N \leq 5000
  • Pi=−1P_i = -1 或 1≤Pi≤N1 \leq P_i \leq N
  • Pi≠iP_i \neq i
  • 所有输入均为整数

样例解释 1

存在如下 33 种要求方式:

  • P1=2,P2=1,P3=1,P4=3P_1=2, P_2=1, P_3=1, P_4=3。此时,例如修建道路 (1,2),(1,3),(3,4)(1,2), (1,3), (3,4) 共 33 条,可以满足所有城镇的要求,并且这是最小值。
  • P1=2,P2=1,P3=2,P4=3P_1=2, P_2=1, P_3=2, P_4=3。此时,例如修建道路 (1,2),(1,3),(3,4)(1,2), (1,3), (3,4) 共 33 条,可以满足所有城镇的要求,并且这是最小值。
  • P1=2,P2=1,P3=4,P4=3P_1=2, P_2=1, P_3=4, P_4=3。此时,例如修建道路 (1,2),(3,4)(1,2), (3,4) 共 22 条,可以满足所有城镇的要求,并且这是最小值。

注意,并不一定需要直接连接城镇 ii 和 PiP_i。

因此,总和为 88。

样例解释 2

有时一开始所有要求就已经确定,只存在 11 种方式。

由 ChatGPT 4.1 翻译

输入解题思路,AI测评打分。不知道怎么写?

首页