Please sign in first.
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 |
|
|
| 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 |