QOJ.ac

QOJ

IDProblemSubmitterResultTimeMemoryLanguageFile sizeSubmit timeJudge time
#796609#7792. Tree Topological Order CountingZero_OP30 2ms5760kbC++143.1kb2024-12-01 21:58:402024-12-01 21:58:41

Judging History

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

  • [2024-12-01 21:58:41]
  • 评测
  • 测评结果:30
  • 用时:2ms
  • 内存:5760kb
  • [2024-12-01 21:58:40]
  • 提交

answer

#include <bits/stdc++.h>

using namespace std;

const int MAX = 5e2 + 5;
const int mod = 1e9 + 7;

struct mint{
    int v;
    mint() : v(0) {}
    mint(int v) : v(v) {}

    mint& operator += (const mint& o){
        v += o.v;
        if(v >= mod) v -= mod;
        return *this;
    }

    mint& operator -= (const mint& o){
        v -= o.v;
        if(v < 0) v += mod;
        return *this;
    }

    mint& operator *= (const mint& o){
        v = 1LL * v * o.v % mod;
        return *this;
    }

    mint power(long long n) const{
        mint res(1);
        mint base = *this;
        for(; n > 0; n >>= 1, base *= base){
            if(n & 1) res *= base;
        }
        return res;
    }

    mint inv() const {
        return power(mod - 2);
    }

    mint& operator /= (const mint& o){
        return *this *= o.inv();
    }

    friend mint operator + (mint a, const mint& b){ return a += b; }
    friend mint operator - (mint a, const mint& b){ return a -= b; }
    friend mint operator * (mint a, const mint& b){ return a *= b; }
    friend mint operator / (mint a, const mint& b){ return a /= b; }

    friend ostream& operator << (ostream& out, const mint& v){
        return out << v.v;
    }
};

int N, p[MAX], sz[MAX], depth[MAX];
mint A[MAX], fact[MAX], ifact[MAX], dp[MAX], f[MAX][MAX], tmp[MAX][MAX];
vector<int> adj[MAX];
mint ans[MAX];

void prepare(int N){
    fact[0] = ifact[0] = 1;
    for(int i = 1; i <= N; ++i){
        fact[i] = fact[i - 1] * mint(i);
    }

    ifact[N] = fact[N].inv();
    for(int i = N - 1; i >= 1; --i){
        ifact[i] = ifact[i + 1] * mint(i + 1);
    }
}

mint C(int n, int k){
    if(n < k || k < 0) return mint(0);
    return fact[n] * ifact[n - k] * ifact[k];
}

mint iC(int n, int k){
    if(n < k || k < 0) return mint(0);
    return ifact[n] * fact[n - k] * fact[k];
}

void dfs(int u){
    dp[u] = 1;
    for(int v : adj[u]){
        depth[v] = depth[u] + 1;
        dfs(v);
        sz[u] += sz[v];
        dp[u] *= dp[v] * C(sz[u], sz[v]);
    }

    sz[u] += 1;
}

mint pref[MAX];

void dfs_dp(int u){
    for(int v : adj[u]){
        for(int i = 0; i < N; ++i){
            pref[i] = (i == 0 ? 0 : pref[i - 1]) + f[u][i] * iC(N - i - 1, sz[v]);
        }

        for(int i = 1; i < N; ++i){
            f[v][i] = pref[i - 1] * C(N - i - 1, sz[v] - 1);
        }

        dfs_dp(v);
    }
}

int main(){
    ios_base::sync_with_stdio(0); cin.tie(0);

#ifdef LOCAL
    freopen("task.inp", "r", stdin);
    freopen("task.out", "w", stdout);
#endif // LOCAL

    cin >> N;
    for(int i = 1; i < N; ++i){
        cin >> p[i]; --p[i];
        adj[p[i]].emplace_back(i);
    }

    for(int i = 0; i < N; ++i){
        int x; cin >> x;
        A[i] = mint(x);
    }

    prepare(2 * N);
    dfs(0);

    f[0][0] = dp[0];
    dfs_dp(0);

    for(int i = 0; i < N; ++i){
        for(int j = 0; j < N; ++j){
            ans[i] += A[j] * f[i][j];
        }
    }

    for(int i = 0; i < N; ++i) cout << ans[i] << ' ';

    return 0;
}

Details

Tip: Click on the bar to expand more detailed information

Subtask #1:

score: 5
Accepted

Test #1:

score: 5
Accepted
time: 1ms
memory: 5676kb

input:

10
1 2 2 4 2 5 3 2 3
421487749 899442061 973943239 478653728 122912827 681073947 761973567 862016787 295035337 313094543

output:

132551152 750202542 844925059 844925059 320019016 837104208 346368542 333193779 837104208 333193779 

result:

ok 10 numbers

Test #2:

score: 5
Accepted
time: 1ms
memory: 5672kb

input:

10
1 2 2 4 5 4 3 7 1
226457597 222460848 126601784 27445914 811511381 52803670 776934531 832659037 955599897 927944188

output:

802913206 192357888 80729172 288305444 609011662 689888737 609011662 673713322 689888737 479113328 

result:

ok 10 numbers

Subtask #2:

score: 10
Accepted

Dependency #1:

100%
Accepted

Test #3:

score: 10
Accepted
time: 0ms
memory: 5628kb

input:

20
1 1 1 4 2 5 2 5 4 6 4 7 11 11 2 9 7 2 9
305559508 68914843 154933697 736516347 250860247 264123902 632865608 32202124 861284820 505164728 564475479 136404892 645017283 837805203 802302363 50345521 511083407 292719502 356887812 390453540

output:

4420887 270322976 277088290 558845717 651457501 42292358 346897100 706626195 346897100 468004133 556186525 468004133 982694311 614012945 614012945 706626195 982694311 982694311 706626195 982694311 

result:

ok 20 numbers

Test #4:

score: 10
Accepted
time: 1ms
memory: 5636kb

input:

20
1 1 2 1 3 4 4 4 6 10 2 12 4 8 14 9 7 16 15
691946539 440256927 968885281 472566141 20270022 183480725 684128023 668848432 366950038 421741447 88719369 679972163 897823307 376002875 147228549 89583310 930341312 627165235 998616162 46722211

output:

245904036 40491473 208122274 756122338 801039801 614916526 509450260 868456290 509450260 693529082 687591315 99754271 773178914 868456290 791438207 791438207 599551778 599551778 3608560 3608560 

result:

ok 20 numbers

Test #5:

score: 10
Accepted
time: 1ms
memory: 5760kb

input:

20
1 1 1 1 1 1 1 1 1 1 1 10 10 6 15 9 17 7 4
288280511 16879884 428044913 511311984 847245966 72822732 803411803 664704151 974477820 303440613 592210469 341084543 683099992 713223966 417890386 967156434 18771827 81816553 193725635 158295200

output:

207513772 350702711 350702711 146536641 350702711 195759251 146536641 350702711 195759251 195759251 350702711 350702711 428174441 428174441 48091421 808257461 48091421 808257461 554868781 554868781 

result:

ok 20 numbers

Subtask #3:

score: 15
Accepted

Dependency #2:

100%
Accepted

Test #6:

score: 15
Accepted
time: 1ms
memory: 5608kb

input:

100
1 1 1 1 5 2 2 8 8 2 11 1 8 6 8 15 15 8 11 7 14 12 10 12 15 4 12 2 11 2 1 12 6 9 12 36 1 20 15 22 20 11 28 35 8 6 47 26 1 50 26 52 20 51 5 16 7 22 30 25 9 40 4 11 9 35 49 32 3 68 35 50 70 52 2 26 14 15 26 37 72 23 30 41 9 31 32 73 16 13 40 39 32 36 83 23 42 48 8
499370580 226348607 730860505 6961...

output:

378504482 152270968 588856846 588856846 451796857 507053458 485397893 343836957 802668753 637426492 386300892 166332977 516615074 434547603 230818994 362763740 197266323 197266323 619220872 369540656 981420869 809135769 398229189 601015252 83277609 749643676 903903231 83277609 816079877 802671417 29...

result:

ok 100 numbers

Test #7:

score: 15
Accepted
time: 0ms
memory: 5700kb

input:

100
1 2 3 4 3 3 7 8 9 10 10 12 12 10 7 16 16 18 19 20 21 21 20 24 24 26 27 19 29 30 31 18 33 34 35 36 34 38 39 40 41 42 43 42 42 41 39 48 49 48 48 52 53 38 55 18 57 58 59 60 58 62 63 64 65 66 65 68 69 70 70 65 73 74 64 76 77 78 78 80 78 78 83 84 76 86 62 88 89 90 89 57 93 94 95 95 97 7 3 577441326 8...

output:

24745333 332372584 221230837 905244609 871647923 888446266 767512902 623574378 656235660 415629913 849746614 719923753 414658041 414658041 849746614 402205168 526141339 849958506 971879651 443767080 822469942 831691587 831691587 58824397 437732695 467938249 631371835 213888001 566609539 751780666 27...

result:

ok 100 numbers

Test #8:

score: 15
Accepted
time: 1ms
memory: 5632kb

input:

100
1 1 1 2 5 1 5 6 6 3 6 5 13 14 15 16 6 17 19 1 3 20 3 19 23 1 21 28 26 22 30 27 32 29 31 34 10 11 12 37 36 41 43 21 44 46 29 47 49 22 50 52 53 42 16 54 57 35 27 58 61 17 22 30 62 59 66 19 14 55 56 68 67 74 75 76 73 78 77 79 80 42 82 81 85 86 87 71 88 84 91 12 92 89 94 90 37 54 89
605221076 121774...

output:

191199508 4617006 808901507 566404623 124140965 162213750 566404623 864721314 393650962 90732392 258608983 518925993 633131612 162920052 325151707 741164232 456177120 393650962 156411701 632463088 874398001 118929519 953485256 16904827 758670923 629168678 312375353 29155254 13159381 848358851 402682...

result:

ok 100 numbers

Test #9:

score: 15
Accepted
time: 1ms
memory: 5688kb

input:

100
1 1 2 4 5 3 7 6 6 10 6 11 13 6 14 9 16 8 18 20 21 20 19 14 22 26 24 7 8 28 27 32 31 28 34 36 33 38 39 40 41 37 42 44 45 46 47 48 43 13 49 52 53 50 45 54 57 55 59 58 61 31 30 50 60 62 18 68 67 70 22 7 73 74 20 71 77 78 79 80 5 81 66 83 85 16 35 71 86 33 90 84 92 94 95 75 93 51 99
167324337 235996...

output:

960069110 565410671 378415579 83061265 251033682 837557317 949670974 227661063 135094654 196352221 204104597 467559995 962078051 500880733 467559995 820376189 800025336 137849548 861007463 253383929 672706993 444274725 686270519 26681153 853944822 838947777 356454261 823074879 449754211 242297513 79...

result:

ok 100 numbers

Test #10:

score: 15
Accepted
time: 1ms
memory: 5620kb

input:

100
1 2 2 3 3 4 4 5 1 10 10 11 11 12 12 13 1 18 18 19 19 20 20 21 1 26 26 27 27 28 28 29 1 34 34 35 35 36 36 37 1 42 42 43 43 44 44 45 1 50 50 51 51 52 52 53 1 58 58 59 59 60 60 61 35 37 53 33 38 12 47 4 12 31 39 43 71 28 3 44 26 4 56 10 36 23 48 75 23 33 64 37 61 58 72 6 19 80 76
624084541 43803720...

output:

945263113 879084197 191295526 536463760 604811148 604811148 247555643 247555643 910543971 917658385 625486473 820518005 529128244 491159688 165586058 165586058 453191132 65531338 567934672 567934672 188036476 316886889 299902261 316886889 445737302 586518136 331015734 331015734 70230621 250098181 40...

result:

ok 100 numbers

Test #11:

score: 15
Accepted
time: 0ms
memory: 5680kb

input:

100
1 2 3 4 5 6 7 8 8 9 9 10 10 1 15 16 17 18 19 20 21 21 22 22 23 23 1 28 29 30 31 32 33 34 34 35 35 36 36 1 41 42 43 44 45 46 47 47 48 48 49 49 1 54 55 56 57 58 59 60 60 61 61 62 62 1 67 68 69 70 71 72 73 73 74 74 75 75 1 80 81 82 83 84 85 86 86 87 87 88 88 69 92 58 43 66 60 77 52
390699613 651233...

output:

65621655 812092562 932235668 4003220 261644586 935856346 722411218 785121698 535820036 535820036 416920411 416920411 416920411 416920411 812092562 932235668 4003220 261644586 935856346 722411218 785121698 535820036 535820036 416920411 416920411 416920411 416920411 812092562 932235668 4003220 2616445...

result:

ok 100 numbers

Test #12:

score: 15
Accepted
time: 1ms
memory: 5624kb

input:

100
1 2 3 3 3 3 2 2 9 1 4 4 2 7 13 5 5 8 17 16 12 16 10 6 11 24 16 23 25 12 24 16 22 26 34 30 19 23 24 38 25 31 30 28 1 37 41 45 43 15 47 37 42 39 27 53 28 13 43 53 27 53 32 62 60 2 26 14 14 14 58 22 7 5 69 34 28 54 32 14 1 77 37 31 19 35 28 25 15 59 20 39 73 60 70 15 88 75 23
746243501 189811510 61...

output:

598979168 872241254 50503028 74493216 383279680 569030711 148205445 957505231 371091216 128352247 791181979 82141350 404645980 135863973 283785015 732518603 793451753 976035964 897131493 436880141 157275854 157217864 445433968 636821036 727813431 691029440 742701790 572299015 499644234 203584758 157...

result:

ok 100 numbers

Test #13:

score: 15
Accepted
time: 1ms
memory: 5756kb

input:

100
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 52 39 57 88 20 18 42 96 23 95
203758586 574528415 435665491 34474532 638409977 850247931 218570973 588307431 581460307...

output:

669437192 513943159 513943159 513943159 513943159 513943159 513943159 513943159 513943159 513943159 513943159 513943159 513943159 513943159 513943159 513943159 513943159 193584960 513943159 193584960 513943159 513943159 496316739 513943159 513943159 513943159 513943159 513943159 513943159 513943159 ...

result:

ok 100 numbers

Subtask #4:

score: 0
Wrong Answer

Dependency #3:

100%
Accepted

Test #14:

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

input:

350
1 2 2 3 4 1 4 5 4 3 10 4 9 2 1 14 17 5 18 14 12 18 12 21 22 3 9 12 20 19 14 13 29 18 16 16 4 7 3 4 38 4 3 43 36 37 44 1 6 14 40 49 38 46 28 55 42 48 54 21 60 5 35 36 7 1 13 56 9 56 34 6 50 25 37 26 28 26 16 69 54 2 80 18 26 24 47 1 28 15 54 64 69 77 27 90 39 11 58 25 34 48 18 71 63 10 48 64 12 8...

output:

991729696 807913881 995741081 729632544 919093859 996348799 154713167 791682910 382204755 909014208 885785105 525700291 913402606 558904251 156934218 745032404 511861562 121230755 372311783 546595285 529697088 983212867 233325137 304163859 118083769 550053510 780827058 510712176 5757975 422219872 77...

result:

wrong answer 1st numbers differ - expected: '725457781', found: '991729696'

Subtask #5:

score: 0
Wrong Answer

Test #22:

score: 0
Wrong Answer
time: 2ms
memory: 5664kb

input:

3000
1 1 3 1 3 6 1 5 3 2 4 9 6 7 2 7 1 1 8 1 4 17 23 2 5 24 15 12 14 28 16 32 33 16 6 1 3 12 17 31 33 19 43 3 33 7 35 42 23 15 30 12 8 21 16 38 53 8 49 56 21 25 30 54 30 14 20 10 35 28 35 55 12 50 10 1 75 76 19 22 8 82 4 68 42 9 57 68 3 67 56 8 11 23 72 68 9 62 32 20 73 39 74 56 88 61 83 78 69 29 29...

output:

0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 

result:

wrong answer 1st numbers differ - expected: '16671810', found: '0'

Subtask #6:

score: 0
Skipped

Dependency #4:

0%

Subtask #7:

score: 0
Skipped

Dependency #6:

0%