UOJ Logo

NOI.AC

IDProblemSubmitterResultTimeMemoryLanguageFile sizeSubmit timeJudge time
#211864#3807. 随机游走132704606091001522ms53244kbC++1.2kb2024-10-07 18:05:112024-10-29 10:32:50

answer

#include <cstdio>
#include <algorithm>
using namespace std;
const int maxn = 5e5 + 5;
int n, m;
int tot, head[maxn], ver[maxn], nxt[maxn];
long long weigh[maxn], edge[maxn];
void add(int u, int v, long long w) {
    ver[++tot] = v, edge[tot] = w, nxt[tot] = head[u], head[u] = tot;
}
long long W[maxn], S[maxn], T[maxn], dp[maxn];
int cnt, son[maxn];
bool cmp(const int &x, const int &y) {
    return W[x] * (S[y] + T[y]) > W[y] * (S[x] + T[x]);
}
void dfs(int u) {
    W[u] = weigh[u], S[u] = 0;
    for (int i = head[u]; i; i = nxt[i]) {
        int v = ver[i]; long long w = edge[i];
        dfs(v);
        T[v] = w, W[u] += W[v], S[u] += S[v] + w;
    }
    cnt = 0;
    for (int i = head[u]; i; i = nxt[i]) son[++cnt] = ver[i];
    sort(son + 1, son + cnt + 1, cmp);
    long long tim = 0;
    dp[u] = 0;
    for (int i = 1; i <= cnt; i++) {
        dp[u] += (tim + T[son[i]]) * W[son[i]] + dp[son[i]];
        tim += S[son[i]] + T[son[i]];
    }
    return;
}
int main() {
    scanf("%d", &n);
    for (int v = 2, u; v <= n; v++) {
        long long w; scanf("%d%lld", &u, &w);
        add(u, v, w);
    }
    for (int i = 1; i <= n; i++) scanf("%lld", weigh + i);
    dfs(1);
    printf("%lld\n", dp[1]);
    return 0;
}

Details

小提示:点击横条可展开更详细的信息

Test #1:

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

input:

11
1 653
2 978
3 277
4 562
3 119
6 957
3 362
6 637
6 157
9 939
460 270 127 466 193 710 45 318 281 74...

output:

11506132

result:

ok single line: '11506132'

Test #2:

score: 10
Accepted
time: 14ms
memory: 4148kb

input:

50000
1 983
1 937
2 776
4 753
2 494
2 683
2 335
4 316
7 274
6 638
11 535
10 872
13 808
13 817
11 94
...

output:

276117269146880

result:

ok single line: '276117269146880'

Test #3:

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

input:

1000
1 729
1 239
1 433
1 445
1 877
1 648
1 284
1 814
1 287
1 941
1 183
1 126
1 65
1 500
1 823
1 725
...

output:

94592611925

result:

ok single line: '94592611925'

Test #4:

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

input:

1000
1 790
1 229
1 462
1 658
1 880
1 507
1 109
1 66
1 356
1 477
1 963
1 689
1 284
1 962
1 896
1 671
...

output:

91654782236

result:

ok single line: '91654782236'

Test #5:

score: 10
Accepted
time: 194ms
memory: 53244kb

input:

500000
1 87
2 160
3 87
4 518
5 214
6 654
7 329
8 614
9 590
10 13
11 546
12 35
13 417
14 304
15 884
1...

output:

31331837945244749

result:

ok single line: '31331837945244749'

Test #6:

score: 10
Accepted
time: 287ms
memory: 29824kb

input:

500000
1 697
1 11
1 698
1 189
1 824
1 524
1 163
1 335
1 959
1 690
1 368
1 168
1 673
1 398
1 918
1 42...

output:

16263658814895739

result:

ok single line: '16263658814895739'

Test #7:

score: 10
Accepted
time: 240ms
memory: 29820kb

input:

500000
1 148
1 159
1 990
1 585
1 837
1 364
1 754
1 576
1 756
1 426
1 502
1 201
1 185
1 251
1 17
1 20...

output:

16307730758229655

result:

ok single line: '16307730758229655'

Test #8:

score: 10
Accepted
time: 232ms
memory: 30792kb

input:

500000
1 252
1 377
1 130
4 779
5 531
4 815
2 176
4 514
9 21
9 142
2 72
11 293
11 579
9 870
7 731
9 3...

output:

48685536049668

result:

ok single line: '48685536049668'

Test #9:

score: 10
Accepted
time: 331ms
memory: 30796kb

input:

500000
1 484
1 48
3 523
2 793
4 822
1 622
3 874
4 54
6 568
4 867
11 500
7 974
4 966
7 793
1 140
1 40...

output:

49118321005585

result:

ok single line: '49118321005585'

Test #10:

score: 10
Accepted
time: 224ms
memory: 30792kb

input:

500000
1 456
2 231
2 525
4 823
2 377
1 72
2 644
5 391
1 984
1 996
7 590
4 604
7 359
3 138
4 843
3 22...

output:

21539113052010528

result:

ok single line: '21539113052010528'

Extra Test:

score: 0
Extra Test Passed