QOJ.ac

QOJ

IDProblemSubmitterResultTimeMemoryLanguageFile sizeSubmit timeJudge time
#467206#8547. Whose Land?BalintRTL 1956ms31220kbC++203.8kb2024-07-08 15:06:152024-07-08 15:06:15

Judging History

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

  • [2024-07-08 15:06:15]
  • 评测
  • 测评结果:TL
  • 用时:1956ms
  • 内存:31220kb
  • [2024-07-08 15:06:15]
  • 提交

answer

#include <bits/stdc++.h>
using namespace std;
#pragma GCC optimize "Ofast"

typedef unsigned uint;
typedef long long ll;
typedef unsigned long long ull;
typedef pair<int, int> pii;
typedef pair<ll, ll> pll;
typedef vector<int> vi;
typedef vector<pii> vpii;
typedef complex<double> cpx;
template <typename T> using minPq = priority_queue<T, vector<T>, greater<T>>;
#define ms(a, x) memset(a, x, sizeof(a))
#define pb push_back
#define fs first
#define sn second
#define ALL(v) begin(v), end(v)
#define SZ(v) ((int) (v).size())
#define lbv(v, x) (lower_bound(ALL(v), x) - (v).begin())
#define ubv(v, x) (upper_bound(ALL(v), x) - (v).begin())
template <typename T> inline void UNIQUE(vector<T> &v){sort(ALL(v)); v.resize(unique(ALL(v)) - v.begin());}
const int INF = 0x3f3f3f3f;
const ll LLINF = 0x3f3f3f3f3f3f3f3f;
const double PI = acos(-1);
#define FR(i, n) for(int i = 0; i < (n); i++)
#define FOR(i, a, b) for(int i = (a); i < (b); i++)
#define FORR(i, a, b) for(int i = (a); i >= (b); i--)
#define dbg(x) {cerr << #x << ' ' << x << endl;}
#define dbgArr(arr, n) {cerr << #arr; FR(_i, n) cerr << ' ' << (arr)[_i]; cerr << endl;}
template <typename T, typename U>
ostream& operator<<(ostream &os, pair<T, U> p){return os << "(" << p.fs << ", " << p.sn << ")";}

const int MK = 21;
const int MN = 1e5 + 5;
const int MQ = 5e5 + 5;
int n, k, q;
vi adjList[MN];
int par[MN], anc[MN][MK], lDec[MN][MK], rDec[MN][MK];
int dep[MN], ord[MN];
int qu[MN], ql, qr;
pii updVs[MN][MK*2];
int updCnt[MN];

vpii queries[MN];
int ans[MQ];

void bfs(){
    ql = qr = 0;
    qu[qr++] = 0;
    while(ql < qr){
        int n1 = qu[ql++];
        if(par[n1] != -1){
            adjList[n1].erase(find(ALL(adjList[n1]), par[n1]));
            copy(anc[par[n1]], anc[par[n1]]+k, anc[n1]+1);
        }
        anc[n1][0] = n1;
        for(int n2 : adjList[n1]) par[n2] = n1, dep[n2] = dep[n1]+1, qu[qr++] = n2;
    }
    assert(qr == n);

    FORR(i, qr-1, 0){
        int n1 = qu[i];
        lDec[n1][0] = rDec[n1][0] = i;
        if(par[n1] != -1) FR(j, k){
            lDec[par[n1]][j+1] = min(lDec[par[n1]][j+1], lDec[n1][j]);
            rDec[par[n1]][j+1] = max(rDec[par[n1]][j+1], rDec[n1][j]);
        }
    }

    FR(i, n){
        int n1 = qu[i];
        int ind = 0;
        FORR(d, k, -min(k, dep[n1])){
            int ancD = min(dep[n1], (k-d)/2);
            pii p = {lDec[anc[n1][ancD]][d+ancD], rDec[anc[n1][ancD]][d+ancD]+1};
            if(p.sn) updVs[n1][ind++] = p;
        }
        updCnt[n1] = ind;
    }
}

namespace DS {
    int ds[MN];

    int query(int cut){
        //cerr << "query " << cut << endl;
        int res = 0;
        FR(i, n) res += ds[i] >= cut;
        return res;
    }

    void upd(int l, int r, int v){
        //cerr << "upd " << l << ' ' << r << ' ' << v << endl;
        FOR(i, l, r) ds[i] = v;
    }

    void reset(){
        FR(i, n) ds[i] = -1;
    }
};

void sweep(){
    DS::reset();
    FR(i, n){
        FR(j, updCnt[i]){
            auto [l, r] = updVs[i][j];
            DS::upd(l, r, i);
        }
        for(auto [l, ind] : queries[i]){
            ans[ind] = DS::query(l);
        }
    }
}

void solve(){
    cin >> n >> k >> q;
    FR(i, n-1){
        int a, b;
        cin >> a >> b;
        a--; b--;
        adjList[a].pb(b);
        adjList[b].pb(a);
    }
    fill_n(*anc, n*MK, -1);
    fill_n(*lDec, n*MK, INF);
    fill_n(*rDec, n*MK, -1);
    par[0] = -1;
    bfs();

    FR(i, q){
        int l, r;
        cin >> l >> r;
        l--; r--;
        queries[r].pb({l, i});
    }
    sweep();

    FR(i, q) cout << ans[i] << '\n';
}

int main(){
    cin.sync_with_stdio(0); cin.tie(0);
    int t; cin >> t;
    while(t--){
        solve();
        FR(i, n) adjList[i].clear();
        FR(i, n) queries[i].clear();
    }
}

Details

Tip: Click on the bar to expand more detailed information

Test #1:

score: 100
Accepted
time: 0ms
memory: 13904kb

input:

2
5 1 2
1 2
1 3
2 4
2 5
2 2
2 3
8 2 3
1 2
1 3
2 4
2 5
4 6
5 7
7 8
2 2
2 5
3 4

output:

4
5
7
8
6

result:

ok 5 number(s): "4 5 7 8 6"

Test #2:

score: 0
Accepted
time: 151ms
memory: 13940kb

input:

1000
500 1 500
291 2
406 9
207 13
71 15
351 17
442 18
496 19
104 20
208 23
448 34
80 42
187 44
352 45
290 46
116 47
318 50
226 52
129 55
83 59
100 60
54 61
73 65
63 66
454 67
43 71
26 74
68 26
320 75
388 76
425 79
170 81
350 83
48 85
153 86
221 90
290 95
130 96
82 98
124 82
36 99
213 100
121 101
132...

output:

255
386
356
124
315
330
437
8
335
423
398
338
180
242
352
500
145
44
342
261
92
326
38
291
259
71
137
456
171
24
162
453
283
325
250
319
478
460
77
354
56
393
372
217
395
265
188
256
134
68
205
429
436
346
300
462
324
170
291
406
207
480
198
182
489
61
476
127
289
204
282
374
114
406
488
366
121
190...

result:

ok 500000 numbers

Test #3:

score: 0
Accepted
time: 148ms
memory: 14020kb

input:

1000
500 2 500
260 2
93 3
399 4
227 5
238 6
382 7
35 12
194 24
141 26
463 27
497 30
102 31
410 32
308 34
357 42
271 43
208 44
446 46
262 50
457 51
467 52
294 53
424 54
267 56
210 58
48 59
339 48
407 65
320 66
33 68
78 33
79 71
315 72
390 74
128 76
83 81
244 87
375 91
79 93
225 94
1 97
433 1
172 100
...

output:

496
471
423
489
270
388
451
329
495
104
453
321
500
357
24
429
409
496
491
454
469
119
495
460
432
450
496
494
459
435
211
298
426
260
371
490
498
259
490
494
492
477
336
412
425
431
235
445
482
422
296
495
361
407
465
492
497
500
394
222
500
500
500
498
470
470
152
414
337
412
325
387
89
492
313
45...

result:

ok 500000 numbers

Test #4:

score: 0
Accepted
time: 160ms
memory: 15920kb

input:

1000
500 3 500
333 1
268 2
183 3
394 5
420 7
322 12
87 14
285 21
178 23
82 36
106 38
28 49
364 28
30 56
110 57
211 58
486 62
456 66
337 67
222 68
175 76
15 81
489 82
79 91
376 79
274 93
417 94
302 96
457 98
142 102
486 103
13 104
186 111
128 114
35 115
184 117
167 118
156 119
429 120
414 122
84 126
...

output:

478
489
465
360
439
28
488
133
75
497
373
470
496
499
487
141
476
500
381
489
495
171
414
372
449
236
489
422
432
373
488
298
480
473
98
500
474
496
449
446
500
487
110
213
499
446
152
283
322
497
304
245
371
218
323
500
416
485
499
439
480
430
489
496
488
405
483
500
339
476
483
497
494
309
258
358...

result:

ok 500000 numbers

Test #5:

score: 0
Accepted
time: 164ms
memory: 16112kb

input:

1000
500 4 500
109 1
252 5
375 6
50 7
398 11
465 13
127 14
79 15
112 18
301 20
23 22
442 27
219 31
48 35
351 36
460 37
368 40
465 43
16 45
79 48
383 50
32 53
42 32
496 42
54 56
193 54
187 61
93 62
389 63
147 65
86 66
231 67
261 70
365 71
249 88
181 90
77 94
437 98
384 101
411 102
64 103
364 104
456 ...

output:

500
497
379
500
248
492
499
500
325
384
492
365
395
491
130
435
496
340
500
500
478
470
500
346
499
495
164
496
499
498
500
500
326
432
444
500
500
480
500
328
486
500
500
90
463
499
48
387
500
495
478
446
488
81
487
426
500
490
488
351
499
500
497
500
362
431
249
495
491
495
500
494
367
500
420
496...

result:

ok 500000 numbers

Test #6:

score: 0
Accepted
time: 497ms
memory: 16896kb

input:

100
5000 1 5000
4598 1
104 3
1813 7
3677 9
4212 10
739 14
4927 16
3896 17
2012 23
4512 25
1751 26
1487 29
2610 30
3912 31
733 33
4844 39
1179 40
5 43
174 45
4787 47
2500 48
3783 50
2905 54
1943 55
1296 56
4178 59
1021 63
4614 70
4221 71
4782 74
1802 75
4912 76
1839 80
4494 81
3403 82
2355 84
756 91
...

output:

4366
4531
4868
2824
4359
2428
880
3967
4469
3414
4891
1139
611
577
698
4669
1641
2897
520
3730
3629
3913
4701
2735
4626
3279
2037
4040
3401
4845
4911
3015
2878
1753
4669
1094
4319
725
1266
2479
4360
3242
4056
1078
1047
4924
3570
2632
4852
2234
2498
4150
3357
2454
4784
3937
1272
1416
4942
3514
1315
3...

result:

ok 500000 numbers

Test #7:

score: 0
Accepted
time: 522ms
memory: 16796kb

input:

100
5000 2 5000
2567 6
2087 9
801 12
2832 16
3395 23
1178 25
479 30
1690 32
4253 36
2131 37
4668 38
4210 41
4361 47
1930 48
3486 50
3592 52
3956 54
2514 61
1045 64
1348 68
2708 69
300 72
62 73
2064 74
1166 75
3404 77
1292 79
1905 80
358 81
1083 83
4914 86
4642 87
1914 88
4435 92
3514 97
352 100
1167...

output:

4949
4725
4640
4959
4301
1730
4557
4625
4988
2646
276
4021
3492
4707
703
4961
2898
90
4986
3757
4981
3492
3954
4901
4254
798
4972
1580
2928
3446
495
4314
4621
4460
4906
3313
4665
4832
3988
4604
3784
3932
4990
3989
4655
2270
525
4891
4989
4293
4296
4359
4033
4438
4939
4926
1197
4962
4011
4544
3909
15...

result:

ok 500000 numbers

Test #8:

score: 0
Accepted
time: 537ms
memory: 23064kb

input:

100
5000 3 5000
1343 1
3262 3
4789 7
1988 19
4873 24
1618 25
223 29
4077 36
2982 37
1646 38
2585 40
1532 50
4623 52
4948 54
431 57
45 59
1734 45
23 61
428 72
205 75
2916 84
4521 86
1819 88
1376 92
1036 93
334 96
4666 101
4 102
3790 104
895 105
1810 110
2075 114
4285 116
1673 117
1728 118
1453 120
42...

output:

1572
4742
2171
3564
4050
4970
5000
1152
3804
4896
4672
2800
2161
4889
4683
4293
3578
4921
4915
3966
3694
4590
4996
4772
4547
3956
5000
4865
2930
4919
4990
4998
4994
4995
4805
5000
4382
4201
4702
4612
4360
4919
4789
4027
4924
3265
855
4730
2721
4814
4927
4628
1307
3772
4238
3797
4912
4755
4854
2505
4...

result:

ok 500000 numbers

Test #9:

score: 0
Accepted
time: 562ms
memory: 22984kb

input:

100
5000 4 5000
2416 3
246 5
1481 10
1143 15
1759 18
4762 19
2262 26
4167 31
223 32
1969 34
4694 35
4255 36
1373 39
670 44
479 45
2985 48
3024 50
2533 52
2107 62
3254 64
1636 65
1038 66
1680 71
689 73
3202 74
3753 82
4937 84
2295 87
4926 89
3004 91
2218 92
4101 93
2064 98
3910 99
1839 102
1746 103
5...

output:

4254
4911
4148
3692
4971
4940
4114
4433
4950
4881
4998
4982
4715
4982
4701
4864
4746
4856
4988
4996
2562
2235
4878
5000
4931
4934
4738
2950
5000
3608
4759
3076
3608
4877
4996
4601
2379
4793
4973
4967
4865
4697
3813
4984
4991
4929
3808
3482
4992
4472
4960
4840
504
4974
4425
4494
3791
4903
5000
5000
4...

result:

ok 500000 numbers

Test #10:

score: 0
Accepted
time: 1694ms
memory: 29512kb

input:

25
20000 1 20000
16985 7
9470 9
7497 10
12601 13
19428 19
17396 21
13606 27
1463 28
5720 30
6405 31
16086 38
15453 39
10225 41
19740 44
9398 47
18437 49
7152 50
15684 53
13034 55
12112 56
8888 57
6096 66
375 68
19456 78
13234 84
7828 85
5767 97
13148 99
2185 100
3817 101
8 102
14096 8
13295 103
1319...

output:

13854
10421
498
18438
1916
8252
18032
204
18543
18005
5196
13629
12160
15228
7004
6117
2367
14659
5032
17464
18124
10547
12996
16457
17785
3014
19175
9640
5413
15842
18032
1604
14411
9820
7143
5901
8433
7473
17041
15802
18371
12383
15085
18914
3416
2516
18654
5701
9060
10826
19761
6019
3797
7595
188...

result:

ok 500000 numbers

Test #11:

score: 0
Accepted
time: 1855ms
memory: 29364kb

input:

25
20000 2 20000
7250 2
18350 5
4189 8
19461 9
3610 11
10539 13
13349 14
14257 18
12153 22
16728 27
899 30
7367 36
14679 40
17758 41
19047 46
14890 47
14929 49
3193 50
7417 52
18673 57
19096 60
7613 61
9428 62
9576 63
400 64
19758 65
4549 69
2735 70
18322 74
18630 76
14608 78
1529 86
10666 92
435 93...

output:

11555
19950
10702
18264
18983
17767
16022
17567
8482
17678
19659
18692
19822
9299
11016
3283
15127
2364
18320
19204
14616
19990
19817
18719
19639
19986
13080
2437
16101
9004
17041
9904
17431
19887
19350
16813
12983
13196
15307
12404
19576
18723
19312
19939
14506
17131
19337
16306
1184
18831
11189
11...

result:

ok 500000 numbers

Test #12:

score: 0
Accepted
time: 1876ms
memory: 27356kb

input:

25
20000 3 20000
6027 3
10333 6
15473 11
6320 13
7792 18
10979 19
16197 20
14348 21
1690 22
18539 23
8816 24
15089 27
2238 29
8480 32
3288 36
11342 38
2707 39
6511 46
9096 48
5234 50
14712 53
1834 55
6993 57
11184 58
16078 59
18984 61
14820 67
834 68
1754 69
739 71
5016 75
16259 76
741 77
7672 78
17...

output:

19995
11051
12978
17914
19999
19713
12058
19593
19724
15828
11867
19669
11178
16495
16527
19229
19672
13102
19832
14098
8043
14132
18754
19962
19907
18253
8055
16458
19994
8083
17818
19669
16527
12600
19899
19835
19052
19205
20000
19163
12602
7820
19974
19415
19848
19932
12182
18623
19923
18872
1994...

result:

ok 500000 numbers

Test #13:

score: 0
Accepted
time: 1956ms
memory: 31220kb

input:

25
20000 4 20000
4803 2
6508 3
16357 5
476 6
11975 9
7227 12
8645 15
14438 17
8124 19
1566 20
16733 24
2812 26
13988 29
19202 31
16041 35
19283 36
10485 44
14020 46
7672 47
3283 51
729 54
16055 56
19149 62
1305 66
15949 67
2402 73
8194 82
3125 84
17890 85
2847 87
15424 88
10989 89
3520 91
3422 93
15...

output:

17587
19806
15971
19999
19916
2339
19126
19669
19827
19855
18914
8252
18137
20000
6547
20000
19739
19347
18714
19997
15367
14785
19999
19806
19959
19749
19952
15761
19974
18783
19985
18745
19996
18967
19996
19986
13738
18954
19058
17559
2569
19978
19557
8258
13529
19449
19999
19971
5922
11608
19960
...

result:

ok 500000 numbers

Test #14:

score: -100
Time Limit Exceeded

input:

5
100000 1 100000
65452 1
39581 2
51138 3
77143 4
56934 5
11457 7
57146 9
21536 11
4708 12
57852 13
97500 22
76022 23
96583 27
36441 32
30948 35
53232 36
50629 37
79639 38
61377 43
78772 46
41320 47
2344 49
86775 52
63201 57
53901 59
59314 61
95358 62
94950 63
44230 66
99217 69
57344 70
92488 86
961...

output:

99907
37316
85362
3534
84069
55160
74579
5575
50463
67247
697
29352
5606
95882
66442
85534
40921
69176
19195
85386
20900
70472
89510
77618
77039
39606
14908
36890
26439
23200
87029
75059
74992
79899
85273
72156
7678
3593
47438
97802
33899
98258
98991
41669
32763
17643
59525
89407
85433
68525
97000
4...

result: