QOJ.ac

QOJ

IDProblemSubmitterResultTimeMemoryLanguageFile sizeSubmit timeJudge time
#504838#6756. 桂花树Forested25 222ms3924kbC++175.2kb2024-08-04 16:38:562024-08-04 16:38:56

Judging History

你现在查看的是最新测评结果

  • [2024-08-04 16:38:56]
  • 评测
  • 测评结果:25
  • 用时:222ms
  • 内存:3924kb
  • [2024-08-04 16:38:56]
  • 提交

answer

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

using i32 = int;
using i64 = long long;
template <typename T>
using V = vector<T>;
template <typename T>
using VV = V<V<T>>;
template <typename T>
using VVV = V<VV<T>>;
template <typename T>
bool chmin(T &x, const T &y) {
    if (x > y) {
        x = y;
        return true;
    }
    return false;
}
template <typename T>
bool chmax(T &x, const T &y) {
    if (x < y) {
        x = y;
        return true;
    }
    return false;
}

#define ALL(x) begin(x), end(x)
#define LEN(x) (i32) size(x)
#define OVERRIDE4(a, b, c, d, ...) d
#define REP2(i, n) for (i32 i = 0; i < (i32)(n); ++i)
#define REP3(i, l, r) for (i32 i = (i32)(l); i < (i32)(r); ++i)
#define REP(...) OVERRIDE4(__VA_ARGS__, REP3, REP2)(__VA_ARGS__)
#define PER2(i, n) for (i32 i = (i32)(n)-1; i >= 0; --i)
#define PER3(i, l, r) for (i32 i = (i32)(r)-1; i >= (i32)(l); --i)
#define PER(...) OVERRIDE4(__VA_ARGS__, PER3, PER2)(__VA_ARGS__)

void dbg(i32 x) { cerr << x; }
void dbg(i64 x) { cerr << x; }
template <typename T, typename U>
void dbg(pair<T, U> p) {
    cerr << '(';
    dbg(p.first);
    cerr << ", ";
    dbg(p.second);
    cerr << ')';
}
template <typename T>
void dbg(V<T> arr) {
    cerr << '[';
    REP(i, LEN(arr)) {
        if (i) {
            cerr << ", ";
        }
        dbg(arr[i]);
    }
    cerr << ']';
}
void debug() { cerr << '\n'; }
template <typename Head, typename... Tail>
void debug(Head head, Tail... tail) {
    dbg(head);
    cerr << ", ";
    debug(tail...);
}
#ifdef DEBUGF
#define DBG(...)                       \
    do {                               \
        cerr << #__VA_ARGS__ << " : "; \
        debug(__VA_ARGS__);            \
    } while (false)
#else
#define DBG(...) (void)0
#endif

constexpr unsigned MOD = 1000000007;

struct M {
    unsigned v;
    M() : v(0) {}
    M(unsigned x) : v(x % MOD) {}
    M &operator+=(M rhs) {
        v += rhs.v;
        if (v >= MOD) {
            v -= MOD;
        }
        return *this;
    }
    M &operator-=(M rhs) {
        v -= rhs.v;
        if (v >= MOD) {
            v += MOD;
        }
        return *this;
    }
    M &operator*=(M rhs) {
        v = ((unsigned long long)v * rhs.v) % MOD;
        return *this;
    }
    friend M operator+(M lhs, M rhs) {
        lhs += rhs;
        return lhs;
    }
    friend M operator-(M lhs, M rhs) {
        lhs -= rhs;
        return lhs;
    }
    friend M operator*(M lhs, M rhs) {
        lhs *= rhs;
        return lhs;
    }
    M pow(unsigned long long t) const {
        M self = *this;
        M ret(1);
        while (t) {
            if (t & 1) {
                ret *= self;
            }
            self *= self;
            t /= 2;
        }
        return ret;
    }
    M inv() const { return this->pow(MOD - 2); }
    M operator/=(M rhs) {
        *this *= rhs.inv();
        return *this;
    }
    friend M operator/(M lhs, M rhs) {
        lhs /= rhs;
        return lhs;
    }
};

M solve_k0(i32 n, i32 m, V<i32> par) {
    i32 s = max(n, m) + 1;
    V<M> fact(s), invfact(s);
    fact[0] = M(1);
    REP(i, s - 1) { fact[i + 1] = fact[i] * M(i + 1); }
    invfact[s - 1] = fact[s - 1].inv();
    PER(i, s - 1) { invfact[i] = invfact[i + 1] * M(i + 1); }

    V<M> tree(m + 1);
    REP(i, 1, m + 1) {
        V<M> f(i);
        REP(j, i) { f[j] = tree[j] * invfact[j]; }
        VV<M> pws(i, V<M>(i));
        pws[0][0] = M(1);
        REP(j, i - 1) REP(k, i) {
            REP(l, i) {
                if (k + l == i) {
                    break;
                }
                pws[j + 1][k + l] += pws[j][k] * f[l];
            }
        }
        V<M> tmp(i);
        REP(j, i) REP(k, i) {
            tmp[k] += pws[j][k] * invfact[j];
        }
        tree[i] += tmp[i - 1] * fact[i - 1];
        REP(j, 1, i) {
            REP(k, 1, j + 1) {
                tree[i] += tree[j] * tmp[i - 1 - j] * invfact[j - k] * fact[i - 1 - k];
            }
        }
    }
    REP(i, m + 1) {
        cerr << tree[i].v << " \n"[i == m];
    }
    M ans;
    {
        V<M> f(m + 1);
        REP(j, m + 1) { f[j] = tree[j] * invfact[j]; }
        VV<M> pws(m + 1, V<M>(m + 1));
        pws[0][0] = M(1);
        REP(j, m) REP(k, m + 1) {
            REP(l, m + 1) {
                if (k + l == m + 1) {
                    break;
                }
                pws[j + 1][k + l] += pws[j][k] * f[l];
            }
        }
        V<M> tmp(m + 1);
        REP(j, m + 1) REP(k, m + 1) {
            tmp[k] += pws[j][k] * invfact[j];
        }
        ans += tmp[m] * fact[m];
    }
    return ans;
}

void solve() {
    i32 n, m, k;
    cin >> n >> m >> k;
    V<i32> par(n, -1);
    REP(i, 1, n) {
        cin >> par[i];
        --par[i];
    }

    if (m == 0) {
        cout << 1 << '\n';
        return;
    }
    if (m == 1) {
        cout << 2 * n - 1 << '\n';
        return;
    }

    if (k == 0 && n == 1) {
        cout << solve_k0(n, m, par).v << '\n';
    }
}

int main() {
    ios::sync_with_stdio(false);
    cin.tie(nullptr);
    i32 testcase, t;
    cin >> testcase >> t;
    while (t--) {
        solve();
    }
}

Details

Tip: Click on the bar to expand more detailed information

Pretests


Final Tests

Test #1:

score: 0
Wrong Answer
time: 0ms
memory: 3616kb

input:

1 15
4 2 9
1 2 3
4 4 1
1 1 1
4 3 10
1 2 3
4 2 10
1 2 3
2 3 0
1
2 2 8
1
2 4 10
1
3 3 0
1 2
3 2 0
1 1
2 2 0
1
2 4 9
1
4 2 0
1 1 1
2 4 1
1
4 4 8
1 1 1
3 3 0
1 2

output:


result:

wrong answer Answer contains longer sequence [length = 15], but output contains 0 elements

Test #2:

score: 0
Wrong Answer
time: 0ms
memory: 3544kb

input:

2 15
4 2 0
1 1 1
3 4 8
1 2
2 2 9
1
3 4 0
1 1
4 2 9
1 1 1
3 4 2
1 1
3 3 10
1 1
3 3 0
1 2
3 2 0
1 1
3 2 0
1 1
3 4 2
1 2
2 2 0
1
2 2 0
1
4 4 8
1 1 2
3 2 0
1 2

output:


result:

wrong answer Answer contains longer sequence [length = 15], but output contains 0 elements

Test #3:

score: 5
Accepted
time: 16ms
memory: 3924kb

input:

3 15
25363 0 10
1 2 2 4 5 6 5 7 5 7 7 8 13 11 13 12 17 14 19 20 20 22 23 24 22 26 26 24 28 28 30 32 32 30 34 33 35 34 38 37 41 41 40 40 42 46 45 44 47 49 51 49 51 54 54 56 55 58 57 59 60 62 60 61 64 65 63 65 68 66 70 68 69 74 75 72 76 77 78 77 77 78 79 84 83 83 85 87 89 90 91 90 90 91 93 93 97 95 98...

output:

1
1
1
1
1
1
1
1
1
1
1
1
1
1
1

result:

ok 15 numbers

Test #4:

score: 5
Accepted
time: 0ms
memory: 3584kb

input:

4 15
95 1 0
1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1
81 1 0
1 1 3 3 2 4 4 4 7 8 8 11 11 12 15 16 17 18 19 17 19 22 20 22 24 25 27 24 25 26 28 29 32 33 32...

output:

189
161
157
183
179
179
185
165
161
179
191
159
199
177
195

result:

ok 15 numbers

Test #5:

score: 5
Accepted
time: 14ms
memory: 3708kb

input:

5 15
24238 1 9
1 2 2 3 2 3 7 6 6 8 11 8 13 14 14 13 14 15 15 20 17 21 19 24 25 22 23 28 27 29 28 31 32 34 35 32 35 35 39 37 38 42 39 41 43 42 47 47 45 48 49 52 50 52 51 55 53 57 58 58 60 58 60 64 62 66 66 65 65 69 68 68 73 71 72 73 75 78 77 76 78 82 81 84 82 85 84 87 86 89 90 90 90 90 91 93 94 94 98...

output:

48475
54131
56879
54501
49951
55359
46639
52775
56387
53417
55987
58213
48849
46865
56865

result:

ok 15 numbers

Test #6:

score: 0
Wrong Answer
time: 0ms
memory: 3544kb

input:

6 15
90 2 0
1 1 3 3 4 6 3 5 6 1 4 8 6 3 7 2 8 17 12 1 15 8 10 17 4 7 22 1 16 15 13 17 6 24 18 20 29 24 5 37 26 19 1 36 10 11 1 32 12 29 25 36 43 25 36 35 27 30 48 13 57 43 3 48 20 49 10 42 33 32 15 67 3 72 18 59 45 65 22 47 21 76 44 36 70 31 40 36 75
97 2 10
1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1...

output:


result:

wrong answer Answer contains longer sequence [length = 15], but output contains 0 elements

Test #7:

score: 0
Wrong Answer
time: 15ms
memory: 3724kb

input:

7 15
23937 2 0
1 1 2 2 3 3 4 4 5 5 6 6 7 7 8 8 9 9 10 10 11 11 12 12 13 13 14 14 15 15 16 16 17 17 18 18 19 19 20 20 21 21 22 22 23 23 24 24 25 25 26 26 27 27 28 28 29 29 30 30 31 31 32 32 33 33 34 34 35 35 36 36 37 37 38 38 39 39 40 40 41 41 42 42 43 43 44 44 45 45 46 46 47 47 48 48 49 49 50 50 51 ...

output:


result:

wrong answer Answer contains longer sequence [length = 15], but output contains 0 elements

Test #8:

score: 5
Accepted
time: 222ms
memory: 3696kb

input:

8 15
1 89 0

1 88 0

1 86 0

1 81 0

1 89 0

1 88 0

1 85 0

1 88 0

1 99 0

1 93 0

1 94 0

1 79 0

1 97 0

1 88 0

1 96 0


output:

643555007
320020087
809556406
776533926
643555007
320020087
414090976
320020087
356146221
792287148
157695640
15616881
389622706
320020087
654868516

result:

ok 15 numbers

Test #9:

score: 5
Accepted
time: 185ms
memory: 3704kb

input:

9 15
1 85 0

1 86 0

1 90 0

1 87 0

1 87 0

1 91 0

1 81 0

1 79 0

1 86 0

1 80 0

1 81 0

1 88 0

1 98 0

1 89 0

1 78 0


output:

414090976
809556406
196345448
53257258
53257258
538525843
776533926
15616881
809556406
483084065
776533926
320020087
976427145
643555007
299462530

result:

ok 15 numbers

Test #10:

score: 0
Time Limit Exceeded

input:

10 15
1 2600 0

1 2562 0

1 2885 0

1 2926 0

1 2980 0

1 2796 0

1 2809 0

1 2441 0

1 2964 0

1 2384 0

1 2634 0

1 2284 0

1 2732 0

1 2525 0

1 2635 0


output:


result:


Test #11:

score: 0
Wrong Answer
time: 0ms
memory: 3544kb

input:

11 15
1 97 8

1 98 8

1 75 9

1 86 10

1 91 10

1 80 10

1 99 10

1 75 10

1 81 3

1 86 8

1 76 10

1 79 9

1 77 9

1 79 8

1 92 10


output:


result:

wrong answer Answer contains longer sequence [length = 15], but output contains 0 elements

Test #12:

score: 0
Wrong Answer
time: 0ms
memory: 3544kb

input:

12 15
1 2419 9

1 3000 8

1 2952 9

1 2911 10

1 2596 8

1 2997 10

1 2479 10

1 2447 10

1 2504 8

1 2325 9

1 2473 10

1 2674 8

1 2817 9

1 2303 8

1 2253 6


output:


result:

wrong answer Answer contains longer sequence [length = 15], but output contains 0 elements

Test #13:

score: 0
Wrong Answer
time: 0ms
memory: 3528kb

input:

13 15
96 77 0
1 1 2 2 3 3 4 4 5 1 1 1 1 1 1 1 1 1 1 2 2 2 2 2 2 2 2 2 2 3 3 3 3 3 3 3 3 3 3 4 4 4 4 4 4 4 4 4 4 5 5 5 5 5 5 5 5 5 5 6 6 6 6 6 6 6 6 6 6 7 7 7 7 7 7 7 7 7 7 8 8 65 17 9 33 83 76 52 42 17 56 39 82 26 53
89 96 0
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 ...

output:


result:

wrong answer Answer contains longer sequence [length = 15], but output contains 0 elements

Test #14:

score: 0
Wrong Answer
time: 0ms
memory: 3616kb

input:

14 15
79 92 0
1 2 1 3 2 5 6 6 6 10 7 8 10 13 14 13 15 16 17 18 17 18 21 24 25 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 18 33 33 18 9 48 19 2 6 12 28 3 22 50 5 24 14 10 15 42 11 44 36 38 58 21 9
96 81 0
1 2 3 4 3 2 4 7 7 1 7 10 12 13 1 9 14 6 13 18 4 2 4 14 25 3 3...

output:


result:

wrong answer Answer contains longer sequence [length = 15], but output contains 0 elements

Test #15:

score: 0
Wrong Answer
time: 15ms
memory: 3708kb

input:

15 15
27219 2720 0
1 1 2 2 3 3 4 4 5 5 6 6 7 7 8 8 9 9 10 10 11 11 12 12 13 13 14 14 15 15 16 16 17 17 18 18 19 19 20 20 21 21 22 22 23 23 24 24 25 25 26 26 27 27 28 28 29 29 30 30 31 31 32 32 33 33 34 34 35 35 36 36 37 37 38 38 39 39 40 40 41 41 42 42 43 43 44 44 45 45 46 46 47 47 48 48 49 49 50 50...

output:


result:

wrong answer Answer contains longer sequence [length = 15], but output contains 0 elements

Test #16:

score: 0
Wrong Answer
time: 14ms
memory: 3648kb

input:

16 15
23470 2270 0
1 1 2 2 3 3 4 4 5 5 6 6 7 7 8 8 9 9 10 10 11 11 12 12 13 13 14 14 15 15 16 16 17 17 18 18 19 19 20 20 21 21 22 22 23 23 24 24 25 25 26 26 27 27 28 28 29 29 30 30 31 31 32 32 33 33 34 34 35 35 36 36 37 37 38 38 39 39 40 40 41 41 42 42 43 43 44 44 45 45 46 46 47 47 48 48 49 49 50 50...

output:


result:

wrong answer Answer contains longer sequence [length = 15], but output contains 0 elements

Test #17:

score: 0
Wrong Answer
time: 0ms
memory: 3828kb

input:

17 15
94 82 9
1 2 2 3 3 6 6 8 6 10 7 10 13 10 14 14 16 17 18 17 20 18 23 24 22 26 25 27 25 26 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 59 39 56 52 21 51 66 59 33 68 29 34 62 47 59 76 54 72 40 40 3 4 63 33 44 73 59 18 19 70 25 77
93 86 8
1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 ...

output:


result:

wrong answer Answer contains longer sequence [length = 15], but output contains 0 elements

Test #18:

score: 0
Wrong Answer
time: 0ms
memory: 3828kb

input:

18 15
78 96 1
1 1 2 2 3 3 4 4 1 1 1 1 1 1 1 1 1 2 2 2 2 2 2 2 2 2 3 3 3 3 3 3 3 3 3 4 4 4 4 4 4 4 4 4 5 5 5 5 5 5 5 5 5 6 6 6 6 6 6 6 6 6 7 7 52 54 22 16 21 56 64 32 42 64 52 49 19
87 86 9
1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1...

output:


result:

wrong answer Answer contains longer sequence [length = 15], but output contains 0 elements

Test #19:

score: 0
Wrong Answer
time: 14ms
memory: 3708kb

input:

19 15
26104 2591 3
1 1 2 2 3 3 4 4 5 5 6 6 7 7 8 8 9 9 10 10 11 11 12 12 13 13 14 14 15 15 16 16 17 17 18 18 19 19 20 20 21 21 22 22 23 23 24 24 25 25 26 26 27 27 28 28 29 29 30 30 31 31 32 32 33 33 34 34 35 35 36 36 37 37 38 38 39 39 40 40 41 41 42 42 43 43 44 44 45 45 46 46 47 47 48 48 49 49 50 50...

output:


result:

wrong answer Answer contains longer sequence [length = 15], but output contains 0 elements

Test #20:

score: 0
Wrong Answer
time: 15ms
memory: 3636kb

input:

20 15
22821 2558 8
1 1 1 3 2 4 2 5 5 5 7 7 13 4 15 12 1 17 15 6 10 10 13 20 20 1 16 14 9 9 28 24 14 28 2 28 35 20 30 37 1 9 21 35 42 23 41 11 15 29 10 1 13 6 24 11 11 46 32 39 32 10 59 57 20 24 51 24 60 28 65 16 31 42 25 12 27 28 53 49 15 12 58 73 83 47 7 71 2 2 26 57 82 61 17 17 48 96 23 83 2 41 59...

output:


result:

wrong answer Answer contains longer sequence [length = 15], but output contains 0 elements