QOJ.ac

QOJ

IDProblemSubmitterResultTimeMemoryLanguageFile sizeSubmit timeJudge time
#67513#2980. 求和alpha1022100 ✓196ms170712kbC++231.9kb2022-12-10 16:49:262022-12-10 16:49:27

Judging History

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

  • [2023-08-10 23:21:45]
  • System Update: QOJ starts to keep a history of the judgings of all the submissions.
  • [2022-12-10 16:49:27]
  • 评测
  • 测评结果:100
  • 用时:196ms
  • 内存:170712kb
  • [2022-12-10 16:49:26]
  • 提交

answer

#include <cstdio>
#include <algorithm>
using namespace std;
const int N = 3e5;
const int K = 50;
const long long mod = 998244353LL;
int n,m;
int to[(N << 1) + 10],pre[(N << 1) + 10],first[N + 10],edge_tot;
inline void read(int &x)
{
    x = 0;
    char ch = 0,w = 0;
    while(ch < '0' || ch > '9')
        w |= ch == '-',ch = getchar();
    while(ch >= '0' && ch <= '9')
        x = (x << 3) + (x << 1) + (ch ^ '0'),ch = getchar();
    w ? x = -x : NULL;
}
inline void add(int u,int v)
{
    to[++edge_tot] = v;
    pre[edge_tot] = first[u];
    first[u] = edge_tot;
}
int f[N + 10],d[N + 10],sz[N + 10],son[N + 10],top[N + 10];
long long pw[N + 10][K + 10];
void dfs1(int p,int fa,int dep)
{
    long long temp = dep;
    f[p] = fa;
    d[p] = dep;
    sz[p] = 1;
    for(register int i = 1;i <= K;++i)
        pw[p][i] = pw[fa][i] + temp,temp = temp * dep % mod;
    for(register int i = first[p];i;i = pre[i])
        if(to[i] ^ fa)
        {
            dfs1(to[i],p,dep + 1);
            sz[p] += sz[to[i]];
            if(!son[p] || sz[son[p]] < sz[to[i]])
                son[p] = to[i];
        }
}
void dfs2(int p,int t)
{
    top[p] = t;
    if(!son[p])
        return ;
    dfs2(son[p],t);
    for(register int i = first[p];i;i = pre[i])
        if(!top[to[i]])
            dfs2(to[i],to[i]);
}
int getlca(int x,int y)
{
    while(top[x] ^ top[y])
        if(d[top[x]] > d[top[y]])
            x = f[top[x]];
        else
            y = f[top[y]];
    return d[x] < d[y] ? x : y;
}
int main()
{
    read(n);
    int u,v;
    for(register int i = 1;i < n;++i)
        read(u),read(v),add(u,v),add(v,u);
    dfs1(1,0,0);
    dfs2(1,1);
    int x,y,k,lca;
    read(m);
    while(m--)
    {
        read(x),read(y),read(k);
        lca = getlca(x,y);
        printf("%lld\n",(pw[x][k] + pw[y][k] - pw[lca][k] - pw[f[lca]][k]) % mod);
    }
}

Details

Tip: Click on the bar to expand more detailed information

Test #1:

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

input:

100
1 2
1 3
1 4
2 5
3 6
3 7
4 8
2 9
3 10
8 11
8 12
5 13
9 14
9 15
13 16
10 17
16 18
9 19
4 20
20 21
21 22
22 23
23 24
24 25
25 26
26 27
27 28
28 29
29 30
30 31
31 32
32 33
33 34
34 35
35 36
36 37
37 38
38 39
39 40
40 41
41 42
42 43
43 44
44 45
45 46
46 47
47 48
48 49
49 50
50 51
51 52
52 53
53 54
54...

output:

840509765
22411553
990198666
294733105
731031188
872705924
785605909
970109824
117144437
268340429
224967921
858931263
543897136
897979419
251301541
97930
35095520
386548627
433832399
48512839
631652206
735922605
61251333
843826535
637803314
114190242
146872113
893242466
866908606
747057542
32492602...

result:

ok 100 lines

Test #2:

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

input:

100
1 2
1 3
2 4
3 5
3 6
2 7
3 8
5 9
4 10
5 11
3 12
12 13
9 14
6 15
15 16
7 17
11 18
12 19
3 20
3 21
5 22
20 23
2 24
20 25
17 26
7 27
9 28
6 29
20 30
1 31
19 32
4 33
33 34
34 35
35 36
36 37
37 38
38 39
39 40
40 41
41 42
42 43
43 44
44 45
45 46
46 47
47 48
48 49
49 50
50 51
51 52
52 53
53 54
54 55
55 ...

output:

146493924
2085
721518752
960332372
583203962
238526233
129979
510851220
820932948
688912786
421673670
353672281
60744368
374766750
85358
552
53397
182853387
46901575
817738059
354507217
16907908
280419061
17253785
293734447
431780652
914802849
250675186
29375
893744147
125564417
8689425
562290578
64...

result:

ok 100 lines

Test #3:

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

input:

100
1 2
1 3
1 4
2 5
4 6
4 7
7 8
1 9
2 10
5 11
9 12
6 13
3 14
7 15
11 16
12 17
2 18
17 19
13 20
16 21
18 22
22 23
12 24
12 25
21 26
7 27
19 28
9 29
27 30
3 31
29 32
12 33
5 34
1 35
22 36
28 37
2 38
13 39
19 40
18 41
19 42
41 43
36 44
33 45
39 46
34 47
14 48
7 49
49 50
50 51
51 52
52 53
53 54
54 55
55...

output:

873005520
32904299
460594088
299199537
289507498
311679839
68638294
403512452
189984019
664
691721933
128646235
839391218
443873276
214382068
1077
407044351
129904180
104686256
986777354
584623831
938722686
546643362
824523294
357581916
432597073
622730710
4552696
831957720
668982244
258083576
41242...

result:

ok 100 lines

Test #4:

score: 10
Accepted
time: 2ms
memory: 4004kb

input:

1000
1 2
1 3
2 4
2 5
3 6
3 7
4 8
4 9
7 10
4 11
6 12
5 13
8 14
2 15
1 16
14 17
8 18
5 19
18 20
3 21
8 22
12 23
13 24
18 25
21 26
14 27
3 28
7 29
9 30
16 31
2 32
32 33
25 34
2 35
4 36
8 37
8 38
16 39
7 40
30 41
40 42
12 43
33 44
31 45
1 46
13 47
14 48
20 49
25 50
33 51
35 52
1 53
7 54
46 55
54 56
15 5...

output:

603862151
474053789
893426054
866727044
530544935
334673238
192890486
784423755
805465176
430804063
277428842
177909289
18487551
87666211
435025934
251684048
862058145
238552464
1395
887767290
931334270
197441049
160873390
758827538
11077016
235487555
76153196
954056566
348033142
22262207
237248830
...

result:

ok 1000 lines

Test #5:

score: 10
Accepted
time: 2ms
memory: 4096kb

input:

1000
1 2
2 3
2 4
3 5
5 6
1 7
7 8
2 9
8 10
5 11
4 12
4 13
7 14
1 15
4 16
11 17
12 18
14 19
8 20
10 21
11 22
11 23
3 24
9 25
11 26
23 27
11 28
15 29
24 30
3 31
24 32
7 33
11 34
27 35
19 36
22 37
18 38
5 39
4 40
4 41
15 42
18 43
7 44
5 45
26 46
14 47
25 48
2 49
21 50
28 51
25 52
28 53
20 54
6 55
44 56
...

output:

218982075
949795257
301989885
78941082
452578683
26417015
172272535
759552160
955449160
357661015
818126289
471036789
908119349
730011871
482664268
142456799
522729678
363866588
530149955
987075398
112118851
769037925
303493250
568527012
396864228
150060456
975271731
474579394
75882976
805222180
378...

result:

ok 1000 lines

Test #6:

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

input:

1000
1 2
2 3
3 4
2 5
4 6
1 7
5 8
8 9
7 10
3 11
10 12
12 13
5 14
1 15
6 16
10 17
5 18
14 19
10 20
7 21
3 22
7 23
9 24
6 25
6 26
3 27
20 28
25 29
11 30
13 31
1 32
5 33
16 34
18 35
32 36
30 37
20 38
8 39
11 40
38 41
2 42
31 43
32 44
36 45
6 46
3 47
29 48
42 49
10 50
25 51
42 52
34 53
23 54
45 55
4 56
5...

output:

851077264
159276774
248375210
964904392
274726197
590733429
878211216
444094440
131015999
242032357
854690781
281320150
737244756
340965559
879604036
318307410
439893592
669290235
282737141
410388642
576987268
276818143
325640748
441926045
37837096
927405257
599989624
342013250
461516576
704835471
1...

result:

ok 1000 lines

Test #7:

score: 10
Accepted
time: 184ms
memory: 170712kb

input:

300000
1 2
1 3
3 4
2 5
3 6
6 7
2 8
5 9
5 10
9 11
6 12
6 13
10 14
2 15
15 16
8 17
9 18
2 19
14 20
6 21
5 22
11 23
17 24
13 25
4 26
17 27
5 28
28 29
5 30
11 31
27 32
20 33
9 34
17 35
15 36
26 37
24 38
5 39
35 40
18 41
38 42
3 43
9 44
18 45
8 46
46 47
19 48
32 49
4 50
25 51
49 52
17 53
42 54
10 55
29 5...

output:

310134819
455975361
295384894
336067608
876113597
10261
728202657
1660649
181801709
793673436
947061827
248692948
868173339
424957191
995004740
637548712
1016049
480497449
505155640
403167691
340599291
27741981
181632517
118695832
871657083
502065460
321535960
547059090
620178207
349740446
184338857...

result:

ok 300000 lines

Test #8:

score: 10
Accepted
time: 196ms
memory: 166076kb

input:

300000
1 2
1 3
2 4
4 5
2 6
1 7
3 8
4 9
7 10
1 11
7 12
3 13
10 14
5 15
4 16
6 17
12 18
1 19
4 20
16 21
8 22
11 23
6 24
21 25
6 26
10 27
25 28
1 29
6 30
23 31
26 32
10 33
30 34
16 35
3 36
9 37
2 38
12 39
25 40
37 41
19 42
41 43
10 44
41 45
27 46
46 47
4 48
6 49
10 50
39 51
6 52
8 53
51 54
47 55
6 56
1...

output:

646984924
49369224
872676392
283855113
948527314
318544348
997469826
862040117
232223548
846818063
710493753
735743122
669769123
783128870
336319166
659710121
149960271
214523202
851219849
688745539
81
322336450
296499701
725165896
75951193
540812959
42369189
239638464
3321
985753441
41209
504756414...

result:

ok 300000 lines

Test #9:

score: 10
Accepted
time: 191ms
memory: 162796kb

input:

300000
1 2
1 3
1 4
3 5
1 6
1 7
3 8
1 9
7 10
10 11
8 12
9 13
11 14
8 15
7 16
4 17
5 18
3 19
7 20
2 21
13 22
22 23
8 24
4 25
24 26
6 27
20 28
13 29
20 30
22 31
25 32
28 33
26 34
3 35
22 36
36 37
1 38
18 39
24 40
23 41
16 42
1 43
22 44
3 45
3 46
1 47
47 48
38 49
26 50
7 51
19 52
27 53
25 54
14 55
9 56
...

output:

5030
754392925
199513551
682118127
555704036
694394442
552374757
541706186
333372209
3466
688745539
952889294
524023090
187419484
610385342
704528591
134144510
310132072
719721141
10601787
53887910
78386153
748755973
66
788646825
333372209
11583274
486037060
599043720
20009
932152885
65
772750175
30...

result:

ok 300000 lines

Test #10:

score: 10
Accepted
time: 192ms
memory: 168696kb

input:

300000
1 2
2 3
2 4
2 5
1 6
6 7
4 8
4 9
3 10
1 11
1 12
2 13
7 14
14 15
4 16
10 17
15 18
2 19
18 20
11 21
14 22
5 23
22 24
8 25
10 26
6 27
10 28
16 29
13 30
15 31
19 32
15 33
3 34
12 35
12 36
25 37
14 38
5 39
18 40
30 41
29 42
29 43
31 44
34 45
12 46
9 47
10 48
37 49
42 50
4 51
1 52
45 53
32 54
16 55
...

output:

5655
682138835
856584352
529544029
560250665
842392309
893057446
7499931
123118358
616193631
854637985
625679276
828429145
404042469
953233683
686759
243702320
892505566
401840558
538477908
301560720
571506308
17515053
546542165
6756399
739183055
711687348
91479829
234935734
883320078
766051132
8895...

result:

ok 300000 lines