QOJ.ac

QOJ

IDProblemSubmitterResultTimeMemoryLanguageFile sizeSubmit timeJudge time
#641226#9165. Petrol stationsnot_amir18 2089ms509388kbC++144.7kb2024-10-14 19:18:302024-10-14 19:18:31

Judging History

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

  • [2024-10-14 19:18:31]
  • 评测
  • 测评结果:18
  • 用时:2089ms
  • 内存:509388kb
  • [2024-10-14 19:18:30]
  • 提交

answer

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

#define pii pair<int, int>
#define ll long long

#define INF 1e15

struct Vertex {
    Vertex* l, * r;
    ll sum;

    Vertex(ll val) : l(nullptr), r(nullptr), sum(val) {}
    Vertex(Vertex* l, Vertex* r) : l(l), r(r), sum(0) {
        if (l) sum += l->sum;
        if (r) sum += r->sum;
    }

    void extend(){
        if(!l)
            l = new Vertex(0);
        if(!r)
            r = new Vertex(0);
    }
};

ll get_sum(Vertex* v, ll tl, ll tr, ll l, ll r) {
    if (l + 1 > r)
        return 0;
    if (l == tl && tr == r)
        return v->sum;
    if(v->l == nullptr)
        return 0;
    ll tm = (tl + tr) / 2;
    return get_sum(v->l, tl, tm, l, min(r, tm))
        + get_sum(v->r, tm, tr, max(l, tm), r);
}

void update(Vertex* v, ll tl, ll tr, ll pos, int new_val) {
    if (tl + 1 == tr){
        v->sum += new_val;
        return;
    }
    v->extend();
    ll tm = (tl + tr) / 2;
    if (pos < tm)
        update(v->l, tl, tm, pos, new_val);
    else
        update(v->r, tm, tr, pos, new_val);
    v->sum = v->l->sum + v->r->sum;
}

vector<vector<pii>> G;
vector<bool> is_removed;
vector<int> subtree_size;

int get_subtree_size(int node, int parent = -1) {
    subtree_size[node] = 1;
    for (auto [child, w] : G[node]) {
        if (child == parent || is_removed[child]) { continue; }
        subtree_size[node] += get_subtree_size(child, node);
    }
    return subtree_size[node];
}

int get_centroid(int node, int tree_size, int parent = -1) {
    for (auto [child, w] : G[node]) {
        if (child == parent || is_removed[child]) { continue; }
        if (subtree_size[child] * 2 > tree_size) {
            return get_centroid(child, tree_size, node);
        }
    }
    return node;
}

int k;

vector<int> ans, res, jump, jumpw, par, parw, depth;

vector<Vertex*> st;

int dfs0(int v, int p) {
    subtree_size[v] = 1;
    for (auto [u, w] : G[v]) {
        if(u == p || is_removed[u])
            continue;
        subtree_size[v] += dfs0(u, v);
    }
    return subtree_size[v];
}

void dfs1(Vertex* stt, int v, int p, int d, int child, int S) {
    depth[v] = d;
    res[v] = 0;
    if(p != -1) {
        if(depth[jump[p]] - depth[p] == depth[jump[jump[p]]] - depth[jump[p]])
            jump[v] = jump[jump[p]], jumpw[v] = jumpw[jump[p]] + jumpw[p] + parw[v];
        else
            jump[v] = p, jumpw[v] = parw[v];
    }
    for(auto [u, w] : G[v]) {
        if(u == p || is_removed[u])
            continue;
        par[u] = v, parw[u] = w;
        if(p == -1)
            st[u] = new Vertex(0);
        dfs1(stt, u, v, d + 1, p==-1?u:child, S);
    }
    if(p != -1) {
        int a = v, s = 0;
        ans[v] += res[v] * (S - subtree_size[child]);
        while(jump[a] != a && s + parw[a] <= k) {
            if(jumpw[a] + s <= k)
                s += jumpw[a], a = jump[a];
            else
                s += parw[a], a = par[a];
        }
        if(jump[a] == a) {
            update(stt, 0, INF, k - s, res[v] + 1);
            update(st[child], 0, INF, k - s, res[v] + 1);
        }
        else
            res[a] += res[v] + 1;
    }
}

void dfs2(Vertex* stt, int v, int p, int s, int child) {
    for(auto [u, w] : G[v]) {
        if(u == p || is_removed[u])
            continue;
        if(p == -1)
            child = u;
        int refuel = get_sum(stt, 0, INF, s, s + w);
        refuel -= get_sum(st[child], 0, INF, s, s + w);
        ans[v] += refuel * subtree_size[u];
        update(stt, 0, INF, s + k, refuel);
        dfs2(stt, u, v, s + w, child);
        update(stt, 0, INF, s + k, -refuel);
    }
}

void centroid_decomp(int node = 0) {
    int centroid = get_centroid(node, get_subtree_size(node));

    Vertex* stt = new Vertex(0);

    jump[centroid] = centroid;
    jumpw[centroid] = 0;
    dfs1(stt, centroid, -1, 0, 0, dfs0(centroid, -1));
    update(stt, 0, INF, k, 1);
    dfs2(stt, centroid, -1, 0, 0);

    is_removed[centroid] = true;

    for (auto [child, w] : G[centroid]) {
        if (is_removed[child]) { continue; }
        centroid_decomp(child);
    }
}

int main() {
    ios_base::sync_with_stdio(false);
    cin.tie(NULL);
    int n;
    cin >> n >> k;
    G.resize(n);
    is_removed.resize(n);
    subtree_size.resize(n);
    par.resize(n);
    parw.resize(n);
    jump.resize(n);
    jumpw.resize(n);
    ans.resize(n);
    res.resize(n);
    depth.resize(n);
    st.resize(n);
    for(int i = 0; i < n - 1; i++) {
        int u, v, l;
        cin >> u >> v >> l;
        G[u].push_back({v, l});
        G[v].push_back({u, l});
    }
    centroid_decomp();
    for(int i = 0; i < n; i++)
        cout << ans[i] << '\n';
}

Details

Tip: Click on the bar to expand more detailed information

Subtask #1:

score: 18
Accepted

Test #1:

score: 18
Accepted
time: 14ms
memory: 10776kb

input:

750 918
159 63 18
573 310 105
135 400 57
618 27 113
41 265 24
99 576 61
242 85 109
490 88 0
626 721 0
407 446 0
78 644 124
346 198 17
541 504 147
543 423 24
302 450 25
397 344 80
129 607 76
474 59 140
30 10 29
375 260 1
404 81 0
658 695 153
450 100 92
532 249 10
597 151 133
739 714 0
212 345 85
558 ...

output:

0
96
45
94
0
0
0
0
0
146
0
0
0
20
32
0
0
88
18
0
2
0
0
0
0
0
43
48
36
10
13
18
0
42
158
0
35
79
17
0
0
0
0
36
0
84
0
8
0
0
20
38
6
0
0
0
0
52
12
4
0
0
12
0
0
0
198
0
30
16
13
45
0
46
0
0
18
44
0
12
0
105
0
0
0
28
75
0
0
12
48
0
0
66
0
0
0
35
0
18
65
42
52
0
0
140
81
114
0
0
27
60
30
76
0
43
0
0
75
2...

result:

ok 750 lines

Test #2:

score: 18
Accepted
time: 20ms
memory: 10452kb

input:

967 334
285 176 1
648 431 1
493 893 2
261 165 1
158 512 2
675 881 1
232 200 2
452 380 2
961 35 1
831 131 1
424 458 1
807 835 2
154 855 1
524 513 2
448 27 1
82 331 2
454 190 2
469 210 2
15 445 2
860 1 2
901 47 0
496 572 2
227 122 1
141 223 2
214 924 1
4 381 2
394 703 2
859 611 2
63 688 1
197 674 1
59...

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
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:

ok 967 lines

Test #3:

score: 18
Accepted
time: 10ms
memory: 11180kb

input:

1000 963
408 385 876
23 519 951
649 232 605
821 385 792
194 221 882
18 984 910
115 40 155
558 973 126
876 633 625
795 781 727
923 248 397
120 632 320
392 531 185
527 973 508
986 457 918
74 339 432
259 385 243
93 973 961
640 385 531
614 325 839
823 936 691
159 240 184
40 625 891
692 385 331
196 140 1...

output:

0
0
482612
0
912
0
0
766
0
0
0
24
989
0
493138
0
0
0
0
0
1996
979
890
1996
0
0
0
0
1996
0
0
0
0
0
0
0
254507
0
997
2
450646
0
244035
727
0
2043
0
0
0
0
0
0
0
0
0
0
0
0
19929
1996
0
0
0
0
997
0
0
0
0
1994
0
2
0
0
0
0
0
0
0
0
1962
0
0
0
0
3990
493900
0
0
0
0
0
0
3988
0
940
0
0
0
0
0
1996
0
2366
0
1989...

result:

ok 1000 lines

Test #4:

score: 18
Accepted
time: 25ms
memory: 14044kb

input:

1000 396
412 257 190
290 965 25
399 938 174
980 459 117
874 575 124
386 912 40
666 164 124
97 680 49
589 442 197
451 649 109
893 648 134
975 733 198
121 966 63
346 775 94
381 246 169
507 319 159
333 287 101
127 682 118
48 784 34
708 170 0
142 723 148
836 766 185
277 711 188
512 974 68
658 404 136
95...

output:

215160
138947
196491
47632
103775
128657
26093
195362
2694
0
234548
3952
120001
175260
489004
1998
9576
0
97602
2334
86553
18629
5792
57931
251700
122745
0
33115
227964
190106
203868
102592
1290
440
0
9054
79
1620
2166
496039
28992
169701
102833
9701
218081
1463
999
433548
7728
4935
882
817
87200
36...

result:

ok 1000 lines

Test #5:

score: 18
Accepted
time: 15ms
memory: 10052kb

input:

1000 333
896 853 0
28 756 0
658 183 0
488 17 0
475 283 0
587 6 0
979 607 0
918 95 0
247 848 0
799 23 0
815 685 0
580 58 0
724 192 0
398 209 0
140 526 0
966 397 0
595 468 0
827 19 0
866 666 0
62 329 0
599 799 0
13 972 0
526 481 0
593 170 0
312 809 0
106 584 0
670 945 0
602 62 0
765 731 0
756 935 0
33...

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
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:

ok 1000 lines

Test #6:

score: 18
Accepted
time: 0ms
memory: 3720kb

input:

2 31
0 1 31

output:

0
0

result:

ok 2 lines

Test #7:

score: 18
Accepted
time: 12ms
memory: 11552kb

input:

1000 847
24 298 474
208 141 485
789 89 60
1 809 437
936 670 449
254 938 364
796 766 340
114 453 609
656 474 374
522 795 378
80 518 279
220 648 619
643 924 191
267 499 288
483 382 643
270 949 816
284 146 481
861 706 686
103 642 631
626 136 294
642 687 407
30 253 603
149 923 502
396 637 762
0 715 67
5...

output:

16
1080
1966
5980
1856
0
5980
0
0
0
0
0
0
0
0
1992
4702
0
0
968
1996
0
0
0
0
1996
0
0
58
0
61453
0
9874
64
3990
41198
11458
13818
1952
59099
17820
1
0
0
0
0
50596
0
0
0
0
0
0
37219
1215
0
7960
1996
175610
3990
0
31526
21
3988
1996
0
0
8953
11926
0
6980
1302
0
23237
0
0
0
0
0
0
0
1996
0
0
0
0
1996
19...

result:

ok 1000 lines

Test #8:

score: 18
Accepted
time: 16ms
memory: 11752kb

input:

1000 767
476 799 361
271 239 215
447 941 269
219 664 600
904 6 264
154 82 98
711 836 437
7 75 381
922 557 741
61 413 505
87 839 548
389 87 504
634 81 393
428 214 8
812 243 511
492 17 761
765 29 129
617 879 355
251 267 554
8 21 380
505 443 235
427 97 416
678 666 313
342 93 397
145 614 179
991 113 322...

output:

1017
997
3988
1996
0
0
2
0
0
971
1996
1996
0
2983
0
1996
19530
13742
0
0
13888
5015
0
997
0
0
0
0
0
996
0
2
0
78
1996
0
0
0
7948
1
6
0
0
1996
3
0
0
0
0
997
1996
0
0
75588
51097
1996
3988
0
0
0
40284
91174
1996
0
0
0
0
26
11
5976
112650
1996
1996
0
0
12837
0
31468
0
0
0
2967
159
0
9940
0
0
40883
1000...

result:

ok 1000 lines

Test #9:

score: 18
Accepted
time: 16ms
memory: 11744kb

input:

1000 1000
574 351 479
444 634 559
531 70 113
180 828 194
123 521 790
295 646 79
539 462 598
362 736 541
673 23 185
363 906 34
859 258 777
921 726 216
504 760 725
787 64 629
314 245 98
412 361 306
636 841 287
40 818 247
674 267 783
838 903 50
175 509 177
96 46 8
56 775 113
117 762 45
511 718 69
527 4...

output:

17839
4922
3988
0
0
0
0
0
0
0
1996
1996
0
0
0
0
0
2938
958
0
0
0
0
0
0
33
0
0
1097
50763
11918
0
0
4931
4942
0
0
0
1996
0
0
3988
1996
26430
0
3
997
15
0
0
0
61525
11
2971
1974
7960
1996
7783
0
0
0
11
17
4927
3994
0
0
3957
2968
8947
986
0
0
0
0
0
0
0
0
0
5976
0
2985
0
0
0
5974
6879
40013
45110
0
1872...

result:

ok 1000 lines

Test #10:

score: 18
Accepted
time: 17ms
memory: 11668kb

input:

1000 1000
680 881 340
73 368 929
303 239 219
861 605 561
243 667 531
357 96 797
561 264 569
267 59 169
146 639 660
161 931 423
209 525 524
406 689 275
544 504 153
296 406 735
245 144 706
806 165 557
444 234 477
614 437 682
503 628 205
539 636 135
219 202 863
938 665 376
983 452 512
841 241 924
664 9...

output:

88
3990
9954
0
0
1996
8458
0
0
5974
0
0
0
0
9952
2
9954
0
1996
6915
978
1996
989
0
31481
1996
157
1996
0
0
988
1996
0
17140
7960
0
1919
928
268
0
0
0
0
0
0
0
0
14876
0
1996
43
59135
983
0
0
0
0
0
1996
76302
0
0
4592
5976
2
0
0
0
0
43971
990
0
0
0
0
0
3972
1996
0
0
1915
0
1994
1996
997
0
0
0
138
0
0
...

result:

ok 1000 lines

Test #11:

score: 18
Accepted
time: 16ms
memory: 11692kb

input:

1000 1000
164 378 963
934 141 358
866 915 598
341 220 55
598 757 654
149 668 202
215 502 818
439 618 693
55 873 554
927 190 748
976 487 779
402 411 89
732 990 641
557 432 734
515 574 638
491 907 217
217 556 332
483 614 81
25 106 975
245 635 724
902 208 219
211 722 209
390 738 587
748 602 338
216 14 ...

output:

1996
0
1147
1996
18739
2976
0
0
0
0
0
1995
3990
0
13587
0
0
5982
1
0
997
0
1996
1996
0
0
0
0
2953
1994
1996
16
664
0
0
0
0
1996
30
3986
0
6932
3988
173897
1358
0
8907
0
0
0
1996
0
0
0
1996
1996
0
0
11938
1163
136386
1996
0
411
0
0
0
0
7903
29433
9084
3988
0
331
9940
23743
1996
0
0
3957
0
0
0
991
0
0...

result:

ok 1000 lines

Test #12:

score: 18
Accepted
time: 8ms
memory: 9992kb

input:

1000 537
276 155 470
533 155 391
175 155 343
553 155 270
24 155 447
614 155 239
927 155 314
899 155 188
398 155 344
18 155 501
937 155 413
671 155 184
808 155 418
200 155 501
491 155 374
717 155 245
692 155 476
313 155 455
0 155 232
702 155 275
544 155 498
66 155 237
245 155 233
865 155 188
574 155 ...

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
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:

ok 1000 lines

Subtask #2:

score: 0
Wrong Answer

Test #13:

score: 8
Accepted
time: 0ms
memory: 3652kb

input:

2 1
0 1 1

output:

0
0

result:

ok 2 lines

Test #14:

score: 0
Wrong Answer
time: 2089ms
memory: 479828kb

input:

70000 1
50913 18377 1
33894 11911 1
61940 7863 1
61602 33470 1
26341 35575 1
30813 50301 1
2994 67214 1
38527 61714 1
37381 3396 1
43274 14867 1
59352 12066 1
68877 40750 1
44756 43671 1
57921 17977 1
10879 47719 1
26878 13556 1
27329 23697 1
45109 11513 1
21307 12312 1
27202 27807 1
7250 14810 1
27...

output:

2128187656
1918647796
1539693556
1198079316
-2067325908
537651676
1566795636
1713609688
462341800
403913520
1372196836
-1845595920
-1846306120
226085260
-2005152808
-1920424216
1462250988
-1848065556
-2006623560
788226400
1802397916
-2075796940
-1927765680
130103388
1927347880
-1970031156
630135880
...

result:

wrong answer 5th lines differ - expected: '2227641388', found: '-2067325908'

Subtask #3:

score: 0
Skipped

Dependency #2:

0%

Subtask #4:

score: 0
Wrong Answer

Test #17:

score: 12
Accepted
time: 1922ms
memory: 467692kb

input:

69973 4
44281 27162 1
15299 61302 1
19250 66379 1
45970 65938 1
23683 4445 2
62232 40589 1
37028 58991 2
58769 32024 0
41860 69672 2
14687 10058 2
7874 6780 2
60579 37047 2
739 4096 2
53137 22114 2
35060 21464 0
42597 11591 2
68051 23473 2
61458 35690 2
38719 6601 2
57406 26025 1
38192 41521 0
47941...

output:

769608
34960
1162375
626228
2
419792
493364
419754
1817301
15
838740
515085
769584
0
0
659707
915948
209895
208656
69972
1251384
277968
1231290
517455
825285
560784
417892
349256
489692
979020
139930
139938
209902
1518040
1146693
287344
403088
1
279861
209896
699603
732904
723193
769575
140252
10391...

result:

ok 69973 lines

Test #18:

score: 0
Wrong Answer
time: 2051ms
memory: 509388kb

input:

70000 6
12580 20937 2
31244 33335 1
62095 66946 0
2558 64306 2
38762 111 2
64974 13699 1
43807 54819 1
20265 66474 3
56426 21940 0
17487 26140 2
11417 36996 2
640 46428 0
45138 54845 1
50554 13418 3
66554 43463 0
54345 51628 2
50263 55697 1
11292 25053 1
29900 10115 2
54500 17279 1
54173 57033 3
608...

output:

95678
275287413
81937227
47960445
176569
64768
441678666
980093268
490395803
549945
-1852586305
572294079
0
1210579335
0
23682745
0
901519414
203750140
923453439
104544
293252454
0
514830
915152602
1023643716
710424
0
1138664466
696145940
2080089300
0
0
589624
1220178831
51949
-1954544545
193419
904...

result:

wrong answer 11th lines differ - expected: '2442380991', found: '-1852586305'

Subtask #5:

score: 0
Skipped

Dependency #4:

0%

Subtask #6:

score: 0
Skipped

Dependency #1:

100%
Accepted

Dependency #2:

0%