atcoder#NOMURA2020D. Urban Planning

Urban Planning

配点 : 700700

問題文

1,2,,N1, 2, \cdots, N の番号がついた NN 個の町があります。

現在、22 つの相異なる町を双方向に結ぶ道をいくつか作ることが計画されています。現時点では、町を結ぶ道はありません。

この計画において、各町は他の町を 11 つ選んで、道を 11 本以上使ってその町に移動できるように要請します。

NN 個の町の要請は配列 P1,P2,,PNP_1, P_2, \cdots, P_N で表され、町 ii の要請は、Pi=1P_i = -1 のときまだ決定されていないこと、1PiN1 \leq P_i \leq N であるとき町 PiP_i を選んだことを表します。

Pi=1P_i = -1 である町の個数を KK 個としたとき、全体では (N1)K(N-1)^K 通りの要請方法が考えられます。それぞれの要請方法について、すべての町の要請を満たすために作る必要がある道の本数の最小値を求め、その総和を 109+710^9+7 で割った余りを出力してください。

制約

  • 2N50002 \leq N \leq 5000
  • Pi=1P_i = -1 または 1PiN1 \leq P_i \leq N
  • PiiP_i \neq i
  • 入力は全て整数である

入力

入力は以下の形式で標準入力から与えられる。

NN

P1P_1 P2P_2 \cdots PNP_N

出力

それぞれの要請方法について、すべての町の要請を満たすために作る必要がある道の本数の最小値を求め、その総和を 109+710^9+7 で割った余りを出力せよ。

4
2 1 -1 3
8

要請方法としては次の 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
2 1
1

初めから要請が 11 通りに決まっている場合もあります。

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