Submission #31923069


Source Code Expand

#include <bits/stdc++.h>
using namespace std;

typedef long long ll;
#define MOD 998244353
#define rep(i,a,n) for (ll i=a;i<(ll)n;i++)
#define per(i,a,n) for (ll i=n;i-->(ll)a;)
#define pb push_back

int n;
int a[2010];// 读入
int fa[2010]; // 并查集父节点
int sz[2010]; // 点个数
bool cir[2010]; // 是否有环

int getfa(int x){
  return x == fa[x]?x:(fa[x] = getfa(fa[x]));
}

void link(int u,int v){
  int fu = getfa(u);
  int fv = getfa(v);
  if(fu == fv){
    cir[fu] = true; // 有环
    return;
  }
  sz[fv] += sz[fu]; // 大小
  cir[fv] |= cir[fu]; // 环
  fa[fu] = fv;
}

ll mypow(ll v,int pwr){
  ll r = 1;
  while(pwr){
    if(pwr%2)(r*=v)%=MOD;
    (v*=v)%=MOD;
    pwr/=2;
  }
  return r;
}
ll fac[2010] = {1}; // 阶乘

int main(){
  cin>>n;
  int freecnt = 0; // 自由度 -1 个数
  rep(i,1,n+1){
    fa[i] = i;
    sz[i] = 1;
    fac[i] = fac[i-1]*i%MOD;
    scanf("%d",a+i);
    freecnt += a[i] == -1;
  }
  rep(i,1,n+1){
    if(a[i] == -1)continue;
    link(i,a[i]);
  }
  vector<int> arr ;
  int circnt = 0;
  rep(i,1,n+1){
    if(fa[i] != i)continue; // 非联通块根
    if(cir[i]){ // 环
      circnt++;
      continue;
    }
    arr.push_back(sz[i]); // 树 有一个自由度
  }
  ll ans = circnt * mypow(n,freecnt) % MOD; // 本身就是环的贡献
  vector<ll> mulsum(n+10,0); // dp mulsum[树的个数] = sz乘积和
  mulsum[0] = 1;
  rep(i,0,(int)arr.size()){
    rep(k,0,i+1){
      // 注意前面一半只是 k+1个构成环的方案数, 对于环以外的 freecnt-k-1的自由度任意搭配 才是这些环对总答案的贡献值
      (ans += fac[k] * mulsum[k] % MOD * arr[i] % MOD * mypow(n,freecnt-k-1) % MOD)%=MOD;
    }
    per(k,0,i+1){
      (mulsum[k+1] += mulsum[k]*arr[i])%=MOD;
    }
  }
  printf("%lld\n",ans);
  return 0;
}

Submission Info

Submission Time
Task D - One to One
User cromarmot
Language C++ (GCC 9.2.1)
Score 700
Code Size 1798 Byte
Status AC
Exec Time 108 ms
Memory 3812 KiB

Compile Error

./Main.cpp: In function ‘int main()’:
./Main.cpp:50:10: warning: ignoring return value of ‘int scanf(const char*, ...)’, declared with attribute warn_unused_result [-Wunused-result]
   50 |     scanf("%d",a+i);
      |     ~~~~~^~~~~~~~~~

Judge Result

Set Name Sample All
Score / Max Score 0 / 0 700 / 700
Status
AC × 3
AC × 54
Set Name Test Cases
Sample example_00.txt, example_01.txt, example_02.txt
All example_00.txt, example_01.txt, example_02.txt, test_00.txt, test_01.txt, test_02.txt, test_03.txt, test_04.txt, test_05.txt, test_06.txt, test_07.txt, test_08.txt, test_09.txt, test_10.txt, test_11.txt, test_12.txt, test_13.txt, test_14.txt, test_15.txt, test_16.txt, test_17.txt, test_18.txt, test_19.txt, test_20.txt, test_21.txt, test_22.txt, test_23.txt, test_24.txt, test_25.txt, test_26.txt, test_27.txt, test_28.txt, test_29.txt, test_30.txt, test_31.txt, test_32.txt, test_33.txt, test_34.txt, test_35.txt, test_36.txt, test_37.txt, test_38.txt, test_39.txt, test_40.txt, test_41.txt, test_42.txt, test_43.txt, test_44.txt, test_45.txt, test_46.txt, test_47.txt, test_48.txt, test_49.txt, test_50.txt
Case Name Status Exec Time Memory
example_00.txt AC 7 ms 3668 KiB
example_01.txt AC 2 ms 3744 KiB
example_02.txt AC 2 ms 3668 KiB
test_00.txt AC 29 ms 3724 KiB
test_01.txt AC 2 ms 3604 KiB
test_02.txt AC 8 ms 3740 KiB
test_03.txt AC 12 ms 3684 KiB
test_04.txt AC 2 ms 3668 KiB
test_05.txt AC 6 ms 3692 KiB
test_06.txt AC 12 ms 3776 KiB
test_07.txt AC 3 ms 3680 KiB
test_08.txt AC 2 ms 3776 KiB
test_09.txt AC 7 ms 3620 KiB
test_10.txt AC 27 ms 3632 KiB
test_11.txt AC 31 ms 3780 KiB
test_12.txt AC 28 ms 3768 KiB
test_13.txt AC 30 ms 3788 KiB
test_14.txt AC 23 ms 3744 KiB
test_15.txt AC 30 ms 3776 KiB
test_16.txt AC 27 ms 3692 KiB
test_17.txt AC 22 ms 3640 KiB
test_18.txt AC 30 ms 3660 KiB
test_19.txt AC 28 ms 3716 KiB
test_20.txt AC 103 ms 3812 KiB
test_21.txt AC 100 ms 3776 KiB
test_22.txt AC 97 ms 3636 KiB
test_23.txt AC 101 ms 3700 KiB
test_24.txt AC 99 ms 3708 KiB
test_25.txt AC 100 ms 3724 KiB
test_26.txt AC 100 ms 3696 KiB
test_27.txt AC 107 ms 3640 KiB
test_28.txt AC 105 ms 3780 KiB
test_29.txt AC 99 ms 3728 KiB
test_30.txt AC 2 ms 3700 KiB
test_31.txt AC 3 ms 3776 KiB
test_32.txt AC 2 ms 3744 KiB
test_33.txt AC 2 ms 3632 KiB
test_34.txt AC 2 ms 3624 KiB
test_35.txt AC 4 ms 3624 KiB
test_36.txt AC 2 ms 3688 KiB
test_37.txt AC 3 ms 3712 KiB
test_38.txt AC 2 ms 3716 KiB
test_39.txt AC 2 ms 3716 KiB
test_40.txt AC 99 ms 3788 KiB
test_41.txt AC 98 ms 3700 KiB
test_42.txt AC 108 ms 3700 KiB
test_43.txt AC 103 ms 3724 KiB
test_44.txt AC 105 ms 3724 KiB
test_45.txt AC 104 ms 3760 KiB
test_46.txt AC 103 ms 3728 KiB
test_47.txt AC 104 ms 3708 KiB
test_48.txt AC 104 ms 3724 KiB
test_49.txt AC 104 ms 3772 KiB
test_50.txt AC 107 ms 3812 KiB