atcoder#ARC140D. [ARC140D] One to One

[ARC140D] One to One

题目描述

全ての要素が 1 1 以上 N N 以下である長さ N N の整数列 X=(X1,X2,,XN) X=(X_1,X_2,\dots,X_N) に対して次の問題を考え、その答えを f(X) f(X) とします。

N N 頂点の無向グラフ G G があります。(G G は多重辺や自己ループを含むことがあります。) G G の辺は N N 本あり、そのうち i i 番目の辺は頂点 i i と頂点 Xi X_i を繋ぐ辺です。G G の連結成分の個数を求めてください。

長さ N N の整数列 A=(A1,A2,,AN) A=(A_1,A_2,\dots,A_N) が与えられます。各 Ai A_i 1 1 以上 N N 以下の整数あるいは 1 -1 です。

全ての要素が 1 1 以上 N N 以下である長さ N N の整数列 X=(X1,X2,,XN) X=(X_1,X_2,\dots,X_N) であって、Ai  1  Ai = Xi A_i\ \neq\ -1\ \Rightarrow\ A_i\ =\ X_i を満たすものを考えます。そのような全ての X X に対する f(X) f(X) の総和を 998244353 998244353 で割ったあまりを求めてください。

输入格式

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

N N A1 A_1 A2 A_2 \dots AN A_N

输出格式

答えを出力せよ。

题目大意

你有一个长度为 nn 的序列 a1,a2,,ana_1,a_2,\dots,a_n,其中每个元素都是 [1,n][1,n] 中的整数。

初始时有编号为 1n1 \sim nnn 个节点,对于每个 1in1\leq i \leq n,从 iiaia_i 连一条无向边。ai=1a_i=-1 表示 aia_i 还没有确定。你需要对所有可能的 aa 序列求出图中连通块数量的和对 998244353998244353 取模的结果。

3
-1 1 3
5
1
1
1
8
-1 3 -1 -1 8 -1 -1 -1
433760

提示

制約

  • 1  N  2000 1\ \le\ N\ \le\ 2000
  • Ai A_i 1 1 以上 N N 以下あるいは 1 -1 である。
  • 入力は全て整数である。

Sample Explanation 1

X X として条件を満たすものは以下の 3 3 通りがあります。 - X=(1,1,3) X=(1,1,3) の時、問題の答えは 2 2 です。 - X=(2,1,3) X=(2,1,3) の時、問題の答えは 2 2 です。 - X=(3,1,3) X=(3,1,3) の時、問題の答えは 1 1 です。 よって答えは 2+2+1=5 2+2+1=5 です。