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 |