Submission #2299347
Source Code Expand
#include <bits/stdc++.h> using namespace std; using int64 = long long; const int mod = 1e9 + 7; const int inv2 = 5e8 + 4; vector< int > g[100000]; vector< vector< int64 > > dp[100000]; void rec(int idx) { vector< vector< int64 > > sub(3, vector< int64 >(1)); sub[0][0] = 1; for(auto &to : g[idx]) { rec(to); auto &ch = dp[to]; vector< int64 > sub1(ch[0].size() + 1); for(int i = 0; i < ch[0].size(); i++) { (sub1[i + 1] += ch[0][i] * 2) %= mod; (sub1[i + 1] += ch[1][i]) %= mod; } vector< vector< int64 > > beet(3, vector< int64 >(sub[0].size() + ch[0].size())); for(int k = 0; k < 3; k++) { for(int i = 0; i < sub[k].size(); i++) { for(int j = 0; j <= ch[0].size(); j++) { if(j < ch[0].size()) { for(int l = 0; l < 3; l++) { (beet[k][i + j] += sub[k][i] * ch[l][j] % mod) %= mod; } } if(k == 0) (beet[1][i + j] += sub[k][i] * sub1[j]) %= mod; if(k == 1) (beet[2][i + j] += sub[k][i] * sub1[j] % mod * inv2) %= mod; } } } sub.swap(beet); } dp[idx].swap(sub); } int main() { int N; cin >> N; for(int i = 1; i < N; i++) { int p; cin >> p; g[--p].emplace_back(i); } int64 fact[2002]; fact[0] = 1; for(int i = 1; i < 2002; i++) { (fact[i] = fact[i - 1] * i) %= mod; } rec(0); int64 ret = 0; for(int i = 0; i < N; i++) { int64 add = 0; for(int j = 0; j < 3; j++) (add += dp[0][j][i]) %= mod; (add *= fact[N - i]) %= mod; if(i & 1) (ret += mod - add) %= mod; else (ret += add) %= mod; } cout << ret << endl; }
Submission Info
Submission Time | |
---|---|
Task | A - Awkward |
User | ei13333 |
Language | C++14 (GCC 5.4.1) |
Score | 1000 |
Code Size | 1712 Byte |
Status | AC |
Exec Time | 130 ms |
Memory | 57856 KB |
Judge Result
Set Name | Sample | All | ||||
---|---|---|---|---|---|---|
Score / Max Score | 0 / 0 | 1000 / 1000 | ||||
Status |
|
|
Set Name | Test Cases |
---|---|
Sample | a01, a02, a03, a04 |
All | a01, a02, a03, a04, b05, b06, b07, b08, b09, b10, b11, b12, b13, b14, b15, b16, b17, b18, b19, b20, b21, b22, b23, b24, b25, b26, b27, b28, b29, b30, b31, b32, b33, b34, b35, b36, b37, b38, b39, b40, b41, b42, b43, b44, b45, b46, b47, b48, b49, b50, b51, b52, b53, b54, b55 |
Case Name | Status | Exec Time | Memory |
---|---|---|---|
a01 | AC | 3 ms | 4992 KB |
a02 | AC | 3 ms | 4992 KB |
a03 | AC | 3 ms | 4992 KB |
a04 | AC | 3 ms | 4992 KB |
b05 | AC | 3 ms | 4992 KB |
b06 | AC | 119 ms | 5376 KB |
b07 | AC | 128 ms | 52480 KB |
b08 | AC | 98 ms | 5760 KB |
b09 | AC | 96 ms | 5632 KB |
b10 | AC | 96 ms | 5632 KB |
b11 | AC | 96 ms | 5504 KB |
b12 | AC | 98 ms | 5504 KB |
b13 | AC | 103 ms | 5504 KB |
b14 | AC | 119 ms | 5504 KB |
b15 | AC | 97 ms | 5760 KB |
b16 | AC | 27 ms | 5248 KB |
b17 | AC | 3 ms | 4992 KB |
b18 | AC | 3 ms | 4992 KB |
b19 | AC | 97 ms | 5760 KB |
b20 | AC | 96 ms | 5632 KB |
b21 | AC | 96 ms | 5632 KB |
b22 | AC | 96 ms | 5760 KB |
b23 | AC | 98 ms | 5504 KB |
b24 | AC | 97 ms | 5632 KB |
b25 | AC | 100 ms | 9472 KB |
b26 | AC | 119 ms | 5376 KB |
b27 | AC | 107 ms | 20992 KB |
b28 | AC | 118 ms | 5376 KB |
b29 | AC | 121 ms | 42752 KB |
b30 | AC | 121 ms | 42880 KB |
b31 | AC | 114 ms | 30848 KB |
b32 | AC | 127 ms | 51072 KB |
b33 | AC | 97 ms | 5888 KB |
b34 | AC | 98 ms | 7424 KB |
b35 | AC | 98 ms | 7168 KB |
b36 | AC | 97 ms | 5760 KB |
b37 | AC | 97 ms | 5760 KB |
b38 | AC | 97 ms | 5888 KB |
b39 | AC | 97 ms | 5888 KB |
b40 | AC | 97 ms | 5760 KB |
b41 | AC | 98 ms | 5760 KB |
b42 | AC | 97 ms | 5760 KB |
b43 | AC | 97 ms | 5760 KB |
b44 | AC | 97 ms | 5760 KB |
b45 | AC | 129 ms | 56320 KB |
b46 | AC | 130 ms | 56576 KB |
b47 | AC | 130 ms | 57856 KB |
b48 | AC | 128 ms | 53632 KB |
b49 | AC | 128 ms | 53504 KB |
b50 | AC | 117 ms | 5504 KB |
b51 | AC | 118 ms | 5376 KB |
b52 | AC | 119 ms | 5376 KB |
b53 | AC | 119 ms | 5376 KB |
b54 | AC | 119 ms | 5376 KB |
b55 | AC | 116 ms | 36864 KB |