题目描述
给定一张 n 个点的有向图 G=(V,E),点的编号为 1∼n,其每个点都入度、出度均不大于 1。
在出度不大于 1 的有向图中,我们记 fk(x) 表示点 x 在图上沿着出边走 k 步走到的点(如果走到一个不存在出边的点,则停在该点上)。
进一步定义 Gk=(V,E′),其中 E′={(x,fk(x))∣x∈V}。我们称 G 为 Gk 的 k 次方根。
若一个点入度出度均为 0 则称其为孤立点。
又给定一个正整数 c,你需要给 G 增加若干条边得到图 G′,使得:
- 每个节点的入度出度均为 1。
 
- 若两个非孤立点在 G′ 上位于同一连通块†,则在 G 上也要位于同一连通块。
 
- 图 G′ 存在 c 次方根。
 
求加边的方案总数,答案对 998244353 取模。
†:本题中定义有向图连通块为:将所有边视作无向边得到的连通块。
输入格式
第一行,两个正整数 n,c。
第二行,n 个整数,第 i 个表示点 i 的出边指向的点的编号,若为 −1 则表示无出边。
输出格式
仅一行,一个整数,表示答案对 998244353 取模后的值。
5 4
2 5 -1 -1 -1
3
9 7
7 -1 -1 -1 8 1 -1 -1 5
60
8 10
-1 -1 4 -1 -1 -1 -1 -1
1266
提示
令 ai 表示点 i 的出边指向点的编号。
【样例解释 #1】
合法的序列 a1,…,an 有:
- 2,5,1,3,4。
 
- 2,5,3,4,1。
 
- 2,5,4,1,3。
 
【数据范围】
本题采用捆绑测试。
| 子任务编号 | 
n≤ | 
c≤ | 
特殊性质 | 
分值 | 
| 1 | 
5 | 
 | 
2 | 
| 2 | 
1000 | 
2×109 | 
A | 
3 | 
| 3 | 
10 | 
 | 
15 | 
| 4 | 
20 | 
10 | 
| 5 | 
100 | 
25 | 
| 6 | 
500 | 
B | 
10 | 
| 7 | 
 | 
20 | 
| 8 | 
1000 | 
15 | 
- 特殊性质 A:保证不存在 ai=−1。
 
- 特殊性质 B:保证所有 ai=−1。
 
对于 100% 的数据,保证 1≤n≤1000,1≤c≤2×109,1≤ai≤n 或 ai=−1,不存在 i=j 使得 ai=aj 且 ai=−1。