QOJ.ac

QOJ

ID题目提交者结果用时内存语言文件大小提交时间测评时间
#746308#5659. Watching Cowflix_8_8_#16.666667 2751ms108732kbC++234.6kb2024-11-14 14:11:142024-11-14 14:11:23

Judging History

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

  • [2024-11-14 14:11:23]
  • 评测
  • 测评结果:16.666667
  • 用时:2751ms
  • 内存:108732kb
  • [2024-11-14 14:11:14]
  • 提交

answer

#include <bits/stdc++.h>    

using namespace std;

typedef long long ll;

const int N = (int)2e5 + 12, MOD = (int)1e9 + 7, b = 19;

#define int ll
vector<int> g[N], f[N];
bool ok[N], blocked[N];
int n, r[N], s[N], up[N][20], dep[N], tin[N], tout[N], timer;

void build(int v, int pr) {
    up[v][0] = pr;
    for(int i = 1; i < b; i++) {
        up[v][i] = up[up[v][i - 1]][i - 1];
    }
    tin[v] = ++timer;
    for(int to:g[v]) {
        if(to != pr) {
            r[to] = v;
            dep[to] = dep[v] + 1;
            build(to, v);
        }
    }
    tout[v] = ++timer;
}
bool is(int v, int u) {
    return (tin[v] <= tin[u] && tout[v] >= tout[u]);
}
int lca(int v, int u) {
    if(is(v, u)) return v;
    if(is(u, v)) return u;
    for(int i = b - 1; i >= 0; i--) {
        if(!is(up[v][i], u)) {
            v = up[v][i];
        }
    }
    return up[v][0];
}
int get(int v, int u) {
    return dep[v] + dep[u] - 2 * dep[lca(u, v)] - 1;
}
void dfs(int v, int pr = -1) {
    s[v] = 1;
    for(int to:g[v]) {
        if(to == pr || blocked[to]) continue;
        dfs(to, v);
        s[v] += s[to];
    }
}
int find(int v, int pr, int total) {
    for(int to:g[v]) {
        if(to != pr && !blocked[to] && s[to] > total / 2) {
            return find(to, v, total);
        }
    }
    return v;
}
void decompose(int v, int pr = 0) {
    dfs(v);
    v = find(v, -1, s[v]);
    blocked[v] = 1;
    r[v] = pr;
    for(int to:g[v]) {
        if(!blocked[to]) {
            decompose(to, v);
        }
    }
}
set<pair<int, int>> st[N];
set<array<int, 3>> all;
int dp[N], c, L[N];
array<int, 3> get(int v) {
    auto it = (st[v].begin());
    int x = (*it).second, u = 1 + (*it).first;
    it++;
    int y = (*it).second; 
    u += (*it).first;
    return {u, x, y};
}
void make(int v) {
    auto [val, i] = (*st[v].begin());
    st[v].erase(st[v].begin());
    while(!st[v].empty()) {
        auto [x, j] = (*st[v].begin());
        if(i == j) {
            st[v].erase(st[v].begin());
            continue;
        } else {
            break;
        }
    }
    st[v].insert({val, i});
}
void add(int v, int val) {
    int x = v;
    while(v) {
        if((int)st[v].size() >= 2) {
            all.erase(get(v));
        }
        st[v].insert({get(x, v), val});
        make(v);
        if((int)st[v].size() >= 2) {
            all.insert(get(v));
        }
        v = r[v];
    }
}
void er(int v, int val) {
    int x = v;
    while(v) {
        if((int)st[v].size() >= 2) {
            all.erase(get(v));
        }
        st[v].erase({get(v, x), val});
        if((int)st[v].size() >= 2) {
            all.insert(get(v));
        }
        v = r[v];
    }
}
void test() {
    cin >> n;
    for(int i = 1; i <= n; ++i) {
        char x;cin >> x;
        L[i] = i;
        if(x == '1') {
            ok[i] = 1;
            c++;
        }
        f[i].push_back(i);
    }
    if(c == 1) {
        for(int i = 1; i <= n; i++) {
            cout << 1 + i << '\n';
        }
        return;
    }
    for(int i = 1; i <= n - 1; i++) {
        int u, v;
        cin >> u >> v;
        g[u].push_back(v);
        g[v].push_back(u);
    }
    dep[1] = 1;
    build(1, 1);
    decompose(1);
    dp[c] = c;
    for(int i = 1; i <= n; i++) {
        if(ok[i]) {
            add(i, i);
        }
    }
    auto merge = [&](int x, int y) {
        if(x == y) {
            exit(-1);
        }
        if((int)f[x].size() > (int)f[y].size()) {
            swap(x, y);
        }
        int o = lca(L[x], L[y]);
        auto dd = [&](int l, int r) {
            while(l != r) {
                if(!ok[l]) {
                    ok[l] = 1;
                    add(l, y);
                }
                l = up[l][0];
            }
        };
        dd(L[x], o);
        dd(L[y], o);
        L[y] = o;
        for(int i:f[x]) {
            er(i, x);
            add(i, y);
            f[y].push_back(i);
        }
        f[x].clear();
    };
    for(int i = c -  1; i >= 1; i--) {
        dp[i] = dp[i + 1];
        array<int, 3> val = (*all.begin());
        merge(val[1], val[2]);
        dp[i] += val[0];
    }
    for(int i = 1; i <= c; i++) {
        if(dp[i] > n) {
            exit(-1);
        }
    }
    for(int k = 1; k <= n; k++) {
        ll res = (ll)1e18;
        for(int j = 1; j <= c; j++) {
            res = min(res, j * 1ll * k + dp[j]);
        }
        cout << res << '\n';
    }
}

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

    int t = 1;
    // cin >> t;
    
    while(t--)
        test();
}

详细


Pretests


Final Tests

Test #1:

score: 4.16667
Accepted
time: 3ms
memory: 26132kb

input:

5
10001
1 2
2 3
3 4
4 5

output:

4
6
8
9
10

result:

ok 5 number(s): "4 6 8 9 10"

Test #2:

score: 4.16667
Accepted
time: 0ms
memory: 26252kb

input:

7
0001010
7 4
5 6
7 2
5 1
6 3
2 5

output:

4
6
8
9
10
11
12

result:

ok 7 numbers

Test #3:

score: 0
Wrong Answer
time: 3ms
memory: 26988kb

input:

5000
0100000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000100000000000000000000000000000000000000000000000010000000...

output:

921
973
974
975
976
977
978
979
980
981
982
983
984
985
986
987
988
989
990
991
992
993
994
995
996
997
998
999
1000
1001
1002
1003
1004
1005
1006
1007
1008
1009
1010
1011
1012
1013
1014
1015
1016
1017
1018
1019
1020
1021
1022
1023
1024
1025
1026
1027
1028
1029
1030
1031
1032
1033
1034
1035
1036
103...

result:

wrong answer 1st numbers differ - expected: '711', found: '921'

Test #4:

score: 0
Wrong Answer
time: 12ms
memory: 27208kb

input:

5000
0100000000000000000000000000000010000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000010000000000000000000000000000000000000000000000000000000000000000000...

output:

586
587
588
589
590
591
592
593
594
595
596
597
598
599
600
601
602
603
604
605
606
607
608
609
610
611
612
613
614
615
616
617
618
619
620
621
622
623
624
625
626
627
628
629
630
631
632
633
634
635
636
637
638
639
640
641
642
643
644
645
646
647
648
649
650
651
652
653
654
655
656
657
658
659
660
...

result:

wrong answer 1st numbers differ - expected: '890', found: '586'

Test #5:

score: 0
Wrong Answer
time: 8ms
memory: 27176kb

input:

5000
0100000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000100000000000000000000000000000000000000000000000000000000000000001000000000000000001000000000000000000000000000000000000000000000000...

output:

468
469
470
471
472
473
474
475
476
477
478
479
480
481
482
483
484
485
486
487
488
489
490
491
492
493
494
495
496
497
498
499
500
501
502
503
504
505
506
507
508
509
510
511
512
513
514
515
516
517
518
519
520
521
522
523
524
525
526
527
528
529
530
531
532
533
534
535
536
537
538
539
540
541
542
...

result:

wrong answer 1st numbers differ - expected: '794', found: '468'

Test #6:

score: 0
Wrong Answer
time: 2634ms
memory: 108732kb

input:

200000
01000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000...

output:

17161
17162
17163
17164
17165
17166
17167
17168
17169
17170
17171
17172
17173
17174
17175
17176
17177
17178
17179
17180
17181
17182
17183
17184
17185
17186
17187
17188
17189
17190
17191
17192
17193
17194
17195
17196
17197
17198
17199
17200
17201
17202
17203
17204
17205
17206
17207
17208
17209
17210
...

result:

wrong answer 1st numbers differ - expected: '30804', found: '17161'

Test #7:

score: 0
Wrong Answer
time: 2635ms
memory: 108652kb

input:

200000
01000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000...

output:

30644
30645
30646
30647
30648
30649
30650
30651
30652
30653
30654
30655
30656
30657
30658
30659
30660
30661
30662
30663
30664
30665
30666
30667
30668
30669
30670
30671
30672
30673
30674
30675
30676
30677
30678
30679
30680
30681
30682
30683
30684
30685
30686
30687
30688
30689
30690
30691
30692
30693
...

result:

wrong answer 2nd numbers differ - expected: '41023', found: '30645'

Test #8:

score: 0
Wrong Answer
time: 2628ms
memory: 108620kb

input:

200000
01000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000...

output:

17331
17332
17333
17334
17335
17336
17337
17338
17339
17340
17341
17342
17343
17344
17345
17346
17347
17348
17349
17350
17351
17352
17353
17354
17355
17356
17357
17358
17359
17360
17361
17362
17363
17364
17365
17366
17367
17368
17369
17370
17371
17372
17373
17374
17375
17376
17377
17378
17379
17380
...

result:

wrong answer 1st numbers differ - expected: '30736', found: '17331'

Test #9:

score: 0
Wrong Answer
time: 677ms
memory: 59488kb

input:

100000
01000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000...

output:

14270
14271
14272
14273
14274
14275
14276
14277
14278
14279
14280
14281
14282
14283
14284
14285
14286
14287
14288
14289
14290
14291
14292
14293
14294
14295
14296
14297
14298
14299
14300
14301
14302
14303
14304
14305
14306
14307
14308
14309
14310
14311
14312
14313
14314
14315
14316
14317
14318
14319
...

result:

wrong answer 1st numbers differ - expected: '12231', found: '14270'

Test #10:

score: 0
Wrong Answer
time: 726ms
memory: 62544kb

input:

100000
01000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000...

output:

9388
9389
9390
9391
9392
9393
9394
9395
9396
9397
9398
9399
9400
9401
9402
9403
9404
9405
9406
9407
9408
9409
9410
9411
9412
9413
9414
9415
9416
9417
9418
9419
9420
9421
9422
9423
9424
9425
9426
9427
9428
9429
9430
9431
9432
9433
9434
9435
9436
9437
9438
9439
9440
9441
9442
9443
9444
9445
9446
9447
...

result:

wrong answer 1st numbers differ - expected: '15993', found: '9388'

Test #11:

score: 0
Wrong Answer
time: 705ms
memory: 61904kb

input:

100000
01000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000...

output:

8673
8674
8675
8676
8677
8678
8679
8680
8681
8682
8683
8684
8685
8686
8687
8688
8689
8690
8691
8692
8693
8694
8695
8696
8697
8698
8699
8700
8701
8702
8703
8704
8705
8706
8707
8708
8709
8710
8711
8712
8713
8714
8715
8716
8717
8718
8719
8720
8721
8722
8723
8724
8725
8726
8727
8728
8729
8730
8731
8732
...

result:

wrong answer 1st numbers differ - expected: '14608', found: '8673'

Test #12:

score: 0
Wrong Answer
time: 657ms
memory: 57552kb

input:

100000
01000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000...

output:

16477
16774
16775
16776
16777
16778
16779
16780
16781
16782
16783
16784
16785
16786
16787
16788
16789
16790
16791
16792
16793
16794
16795
16796
16797
16798
16799
16800
16801
16802
16803
16804
16805
16806
16807
16808
16809
16810
16811
16812
16813
16814
16815
16816
16817
16818
16819
16820
16821
16822
...

result:

wrong answer 1st numbers differ - expected: '12198', found: '16477'

Test #13:

score: 0
Wrong Answer
time: 738ms
memory: 63192kb

input:

100000
01000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000...

output:

8687
8688
8689
8690
8691
8692
8693
8694
8695
8696
8697
8698
8699
8700
8701
8702
8703
8704
8705
8706
8707
8708
8709
8710
8711
8712
8713
8714
8715
8716
8717
8718
8719
8720
8721
8722
8723
8724
8725
8726
8727
8728
8729
8730
8731
8732
8733
8734
8735
8736
8737
8738
8739
8740
8741
8742
8743
8744
8745
8746
...

result:

wrong answer 1st numbers differ - expected: '16072', found: '8687'

Test #14:

score: 0
Wrong Answer
time: 702ms
memory: 61692kb

input:

100000
01000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000...

output:

8647
8648
8649
8650
8651
8652
8653
8654
8655
8656
8657
8658
8659
8660
8661
8662
8663
8664
8665
8666
8667
8668
8669
8670
8671
8672
8673
8674
8675
8676
8677
8678
8679
8680
8681
8682
8683
8684
8685
8686
8687
8688
8689
8690
8691
8692
8693
8694
8695
8696
8697
8698
8699
8700
8701
8702
8703
8704
8705
8706
...

result:

wrong answer 1st numbers differ - expected: '14721', found: '8647'

Test #15:

score: 0
Wrong Answer
time: 692ms
memory: 57900kb

input:

100000
01000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000...

output:

14474
14475
14476
14477
14478
14479
14480
14481
14482
14483
14484
14485
14486
14487
14488
14489
14490
14491
14492
14493
14494
14495
14496
14497
14498
14499
14500
14501
14502
14503
14504
14505
14506
14507
14508
14509
14510
14511
14512
14513
14514
14515
14516
14517
14518
14519
14520
14521
14522
14523
...

result:

wrong answer 1st numbers differ - expected: '12121', found: '14474'

Test #16:

score: 0
Wrong Answer
time: 756ms
memory: 63340kb

input:

100000
01000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000...

output:

9482
9483
9484
9485
9486
9487
9488
9489
9490
9491
9492
9493
9494
9495
9496
9497
9498
9499
9500
9501
9502
9503
9504
9505
9506
9507
9508
9509
9510
9511
9512
9513
9514
9515
9516
9517
9518
9519
9520
9521
9522
9523
9524
9525
9526
9527
9528
9529
9530
9531
9532
9533
9534
9535
9536
9537
9538
9539
9540
9541
...

result:

wrong answer 1st numbers differ - expected: '16192', found: '9482'

Test #17:

score: 0
Wrong Answer
time: 728ms
memory: 60588kb

input:

100000
01000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000...

output:

8646
8647
8648
8649
8650
8651
8652
8653
8654
8655
8656
8657
8658
8659
8660
8661
8662
8663
8664
8665
8666
8667
8668
8669
8670
8671
8672
8673
8674
8675
8676
8677
8678
8679
8680
8681
8682
8683
8684
8685
8686
8687
8688
8689
8690
8691
8692
8693
8694
8695
8696
8697
8698
8699
8700
8701
8702
8703
8704
8705
...

result:

wrong answer 1st numbers differ - expected: '14705', found: '8646'

Test #18:

score: 0
Wrong Answer
time: 672ms
memory: 57540kb

input:

100000
01000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000...

output:

16576
16577
16578
16579
16580
16581
16582
16583
16584
16585
16586
16587
16588
16589
16590
16591
16592
16593
16594
16595
16596
16597
16598
16599
16600
16601
16602
16603
16604
16605
16606
16607
16608
16609
16610
16611
16612
16613
16614
16615
16616
16617
16618
16619
16620
16621
16622
16623
16624
16625
...

result:

wrong answer 1st numbers differ - expected: '12282', found: '16576'

Test #19:

score: 4.16667
Accepted
time: 129ms
memory: 58604kb

input:

100000
00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000...

output:

6
9
12
15
18
21
24
27
30
33
36
39
42
45
48
51
54
57
60
63
66
69
72
75
78
81
84
87
90
93
96
99
102
105
108
111
114
117
120
123
126
129
132
135
138
141
144
147
150
153
156
159
162
165
168
171
174
177
180
183
186
189
192
195
198
201
204
207
210
213
216
219
222
225
228
231
234
237
240
243
246
249
252
25...

result:

ok 100000 numbers

Test #20:

score: 0
Wrong Answer
time: 2724ms
memory: 99880kb

input:

200000
01000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000...

output:

17345
17346
17347
17348
17349
17350
17351
17352
17353
17354
17355
17356
17357
17358
17359
17360
17361
17362
17363
17364
17365
17366
17367
17368
17369
17370
17371
17372
17373
17374
17375
17376
17377
17378
17379
17380
17381
17382
17383
17384
17385
17386
17387
17388
17389
17390
17391
17392
17393
17394
...

result:

wrong answer 1st numbers differ - expected: '32208', found: '17345'

Test #21:

score: 0
Wrong Answer
time: 2624ms
memory: 95636kb

input:

200000
01000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000...

output:

17006
17007
17008
17009
17010
17011
17012
17013
17014
17015
17016
17017
17018
17019
17020
17021
17022
17023
17024
17025
17026
17027
17028
17029
17030
17031
17032
17033
17034
17035
17036
17037
17038
17039
17040
17041
17042
17043
17044
17045
17046
17047
17048
17049
17050
17051
17052
17053
17054
17055
...

result:

wrong answer 1st numbers differ - expected: '29187', found: '17006'

Test #22:

score: 0
Wrong Answer
time: 2527ms
memory: 89600kb

input:

200000
01000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000...

output:

32606
33432
33433
33434
33435
33436
33437
33438
33439
33440
33441
33442
33443
33444
33445
33446
33447
33448
33449
33450
33451
33452
33453
33454
33455
33456
33457
33458
33459
33460
33461
33462
33463
33464
33465
33466
33467
33468
33469
33470
33471
33472
33473
33474
33475
33476
33477
33478
33479
33480
...

result:

wrong answer 1st numbers differ - expected: '24124', found: '32606'

Test #23:

score: 0
Wrong Answer
time: 2751ms
memory: 100068kb

input:

200000
01000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000...

output:

17907
17908
17909
17910
17911
17912
17913
17914
17915
17916
17917
17918
17919
17920
17921
17922
17923
17924
17925
17926
17927
17928
17929
17930
17931
17932
17933
17934
17935
17936
17937
17938
17939
17940
17941
17942
17943
17944
17945
17946
17947
17948
17949
17950
17951
17952
17953
17954
17955
17956
...

result:

wrong answer 1st numbers differ - expected: '32229', found: '17907'

Test #24:

score: 4.16667
Accepted
time: 233ms
memory: 84388kb

input:

200000
00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000...

output:

6
9
12
15
18
21
24
27
30
33
36
39
42
45
48
51
54
57
60
63
66
69
72
75
78
81
84
87
90
93
96
99
102
105
108
111
114
117
120
123
126
129
132
135
138
141
144
147
150
153
156
159
162
165
168
171
174
177
180
183
186
189
192
195
198
201
204
207
210
213
216
219
222
225
228
231
234
237
240
243
246
249
252
25...

result:

ok 200000 numbers