QOJ.ac

QOJ

IDProblemSubmitterResultTimeMemoryLanguageFile sizeSubmit timeJudge time
#97532#2918. Tree Number Generatormegz112233RE 1117ms244272kbC++234.0kb2023-04-17 05:42:042023-04-17 05:42:07

Judging History

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

  • [2023-08-10 23:21:45]
  • System Update: QOJ starts to keep a history of the judgings of all the submissions.
  • [2023-04-17 05:42:07]
  • 评测
  • 测评结果:RE
  • 用时:1117ms
  • 内存:244272kb
  • [2023-04-17 05:42:04]
  • 提交

answer

#include <bits/stdc++.h>
#define ll long long
#define all(v)  v.begin(),v.end()
#define sz(x)  (int) (x).size()
#define el '\n'
#define Megz ios::sync_with_stdio(0);cin.tie(0);ios_base::sync_with_stdio(0);
using namespace std;
int mod = 1e9 + 7, N = 1e6+5;
int mul  (ll x , ll y ){
    x%=mod  ;
    y%=mod  ;
    return 1ll* (x*y)%mod;
}
int plu  (ll x , ll y ){
    x%=mod  ;
    y%=mod  ;
    return 1ll* (x+y)%mod;
}
struct vertex {
    ll anc ,  up  ,  down   ;
};
struct lca {
    vector<vector<vertex>>  yup_lifting ;
    vector<ll> depth   ;
    vector<ll> adj[400005] ;
    vector<ll> val  ;
    vector<ll> pow  ;
    const  int   LOG  =  19 ;
    void init (int n ){
        depth.assign(n+5, 0) ;
        val.assign(n+5,0) ;
        yup_lifting.assign(n+5,  vector<vertex>(LOG, {0,0,0})) ;
        pow.push_back(1) ;
        for (int i =0 ;  i<= (int) 1e7+5 ; i++){
            pow.push_back(mul(pow.back(),10)) ;
        }
    }
    void dfs (int node , int par ){
        yup_lifting[1][0] =  {par, val[1],  val[1]};
        for (auto child  :  adj[node]){
            if (child == par)continue;
            depth[child] =  depth[node]+1 ;
            yup_lifting[child][0] =  {node, val[child],  val[child]};
            for (int i =1 ; i < LOG ;i++){
                yup_lifting[child][i].anc =  yup_lifting[yup_lifting[child][i-1].anc][i-1].anc ;
                yup_lifting[child][i].up = plu(mul (yup_lifting[child][i-1].up , pow[(1<<i-1)]) , yup_lifting[yup_lifting[child][i-1].anc][i-1].up ) ;
                yup_lifting[child][i].down = plu(mul  (yup_lifting[yup_lifting[child][i-1].anc][i-1].down ,  pow[(1<<i-1)]) , yup_lifting[child][i-1].down)  ;
            }
            dfs(child, node) ;
        }
    }
    vertex go_up (int k  ,  int  node  ){
        vertex curr =  {node , 0,0} ;
        ll cnt = 0 ;
        for (int i =0 ; i < LOG  ; i++){
            if (k&(1<<i)){
                curr.up = plu(mul(curr.up , pow[(1<<i)]) , yup_lifting[curr.anc][i].up) ;
                curr.down = plu(mul  (yup_lifting[curr.anc][i].down , pow[cnt]) , curr.down)  ;
                cnt+=(1<<i) ;
                curr.anc = yup_lifting[curr.anc][i].anc ;
            }
        }
        return curr ;
    }
    int get_lca (int a ,  int b){
        if (depth[a]<depth[b])swap(a,b) ;
        int k =  depth[a]-depth[b] ;
        a  = go_up(k ,  a).anc ;
        if (a==b){
            return a  ;
        }
        for (int i = LOG -1  ; i>=0  ; i--){
            if (yup_lifting[a][i].anc!=yup_lifting[b][i].anc){
                a = yup_lifting[a][i].anc;
                b = yup_lifting[b][i].anc ;
            }
        }
        return yup_lifting[a][0].anc ;
    }
    int get_query (int from ,int to){
        int lca  = get_lca(from ,  to ) ;
        if (lca==from){
            vertex  ans  = go_up(depth[to]-depth[from]+1 ,  to) ;
            return ans.down ;
        }
        else if (lca==to){

            vertex  ans  = go_up(depth[from]-depth[to]+1 ,  from) ;
            return ans.up ;
        }
        else {
            int left  = go_up(depth[from]-depth[lca]+1 , from).up , right  = go_up((depth[to]-depth[lca]) , to).down ;
           // cout <<left <<" " <<right<<" "<<depth[lca]<<" " <<depth[to]<<" "  <<lca  <<el ;
            return plu(mul(left , pow[( depth[to]-depth[lca])] ),  right) ;
        }
    }


} lca;
void acc() {
    int n , q ;cin >>n>>mod >>q ;
    lca.init(n+5) ;
    for (int  i =0 ; i < n-1; i++){
        int x , y ;cin>>x>>y ;
        lca.adj[x].push_back(y) ;
        lca.adj[y].push_back(x) ;
    }

    for (int i =1 ; i<=n ; i++){
        cin >>lca.val[i] ;
        lca.val[i]%=mod ;
    }
    lca.dfs(1, 1) ;
    while (q--){
        int from ,  to ;cin >>from >>to ;
        cout <<lca.get_query(from  ,to)%mod<<el ;
    }
}

int main() {
    Megz
    int t = 1;
    while (t--) {
        acc();
    }

}


//5 100 4
//1 2
//1 3
//1 4
//5 3
//1
//2
//3
//0
//4
//1 5
//5 1
//4 2
//3 3
// ananananananana 5aaaaaawlwlwwllwlwl

Details

Tip: Click on the bar to expand more detailed information

Test #1:

score: 100
Accepted
time: 295ms
memory: 145328kb

input:

2 1 4
1 2
1
3
1 2
2 1
1 1
2 2

output:

0
0
0
0

result:

ok 4 lines

Test #2:

score: 0
Accepted
time: 331ms
memory: 145724kb

input:

3 10 5
1 2
2 3
0
0
0
1 3
3 1
2 2
2 3
2 1

output:

0
0
0
0
0

result:

ok 5 lines

Test #3:

score: 0
Accepted
time: 316ms
memory: 146424kb

input:

2000 2 2000
937 1471
1672 937
356 1672
976 356
1257 356
1503 1257
783 1503
1783 937
1284 976
1955 1503
802 1257
583 1471
526 356
701 1783
393 1955
307 1955
386 1955
1070 937
1724 802
1397 1724
1140 937
422 526
1941 1955
1638 937
1469 526
1800 526
1035 1800
1009 1140
1195 1800
142 1471
1225 1469
1524...

output:

0
1
1
1
0
0
1
0
0
1
0
1
0
0
1
1
0
0
1
1
1
1
1
0
0
0
1
0
1
1
1
1
1
1
0
1
1
1
0
1
1
1
0
1
1
1
0
1
1
1
1
0
0
0
1
1
0
1
0
0
0
0
0
1
0
1
1
0
0
0
0
1
1
1
1
1
0
0
1
1
1
0
1
1
1
0
0
1
1
1
1
0
0
0
1
0
1
0
0
1
1
1
0
1
1
0
1
0
1
0
0
1
0
1
0
0
1
1
0
1
1
1
1
0
0
0
1
0
0
0
0
1
1
0
1
1
0
1
1
0
1
1
0
0
0
1
1
0
0
1
...

result:

ok 2000 lines

Test #4:

score: 0
Accepted
time: 323ms
memory: 145440kb

input:

2000 1000 2000
1664 1028
763 1664
1541 1028
1544 1664
69 1544
1473 1541
475 1541
1551 1541
579 1473
262 475
1777 475
1916 475
391 763
807 1028
1357 1028
1682 69
345 1544
234 1541
63 391
480 807
1762 1544
306 1916
1436 1777
891 391
1852 306
523 1852
264 475
313 306
1139 391
1792 69
1604 69
398 313
10...

output:

263
429
976
56
31
940
168
28
487
658
273
218
944
664
498
705
709
490
61
931
421
664
632
538
876
282
145
61
430
984
589
436
780
641
69
126
625
208
629
603
566
57
355
843
705
781
514
898
804
290
366
642
429
899
716
466
371
620
252
606
690
500
412
226
495
380
61
580
805
132
423
845
618
862
924
729
637
...

result:

ok 2000 lines

Test #5:

score: 0
Accepted
time: 326ms
memory: 146556kb

input:

2000 1000000 2000
676 154
686 154
357 154
187 676
299 686
1508 357
1515 1508
972 686
105 357
748 1515
1711 686
1692 154
1869 299
1017 187
829 1017
809 1515
1505 676
383 1515
1002 972
1448 829
1657 1515
1824 1508
1271 1711
545 1515
1099 748
1255 748
556 545
388 1017
1290 357
992 1824
66 1017
1812 972...

output:

911946
658749
941314
251735
719871
241911
734055
143108
569168
899637
173402
264918
271418
632775
991506
402910
517268
914587
379978
462220
622382
658742
329239
43729
56506
192359
410979
57536
866374
142798
124989
947854
413121
183893
602943
488815
292373
183960
602947
199025
301900
603305
260397
64...

result:

ok 2000 lines

Test #6:

score: 0
Accepted
time: 321ms
memory: 144796kb

input:

2000 1000000000 2000
352 747
534 747
294 534
1548 534
1051 534
1850 747
574 1850
43 1548
1395 1850
1615 1051
1236 294
1869 43
1039 1051
288 294
299 747
217 1395
1220 1051
622 1850
673 574
1296 288
1331 1296
721 1039
1062 1615
518 721
1276 1296
1806 1276
1731 1869
477 574
461 1051
1703 622
358 1703
1...

output:

79101007
887079978
189124001
400049688
284
43253539
818072051
53354038
9042495
272009043
500270860
700462128
335009411
350090556
872000107
46209971
707883989
53354276
271083550
900288054
2682651
818832941
27070294
70720415
513017327
230170729
271033998
200904807
27104651
347046254
900272592
70720094...

result:

ok 2000 lines

Test #7:

score: 0
Accepted
time: 1078ms
memory: 243248kb

input:

200000 2417 200000
146436 54121
82979 146436
129255 146436
99397 146436
148744 129255
125174 99397
55826 129255
13345 55826
131204 146436
59873 148744
148074 55826
23402 125174
24052 146436
93765 99397
177707 131204
33986 59873
51616 23402
144922 55826
92135 82979
63586 148744
45845 33986
199631 148...

output:

2040
1290
1149
1665
1466
926
1073
943
364
1804
1113
1831
354
780
998
1573
2076
2214
1019
1824
2049
1446
2081
1851
299
2303
448
2335
73
719
1799
732
722
2250
1138
1336
1945
1959
1012
804
459
2094
880
592
716
434
1256
1467
564
1585
962
615
1260
994
2294
1750
1134
341
168
573
722
1702
1933
836
772
1678...

result:

ok 200000 lines

Test #8:

score: 0
Accepted
time: 1046ms
memory: 243532kb

input:

200000 689377511 200000
52219 109460
83892 109460
47762 83892
174199 52219
153148 52219
390 52219
48721 390
118607 47762
108230 118607
196969 390
19048 390
136354 47762
30259 390
104080 19048
197168 136354
27383 108230
68792 196969
184569 196969
151197 47762
145028 197168
113317 184569
158439 19048
...

output:

8921815
655545122
413125645
651771343
629854532
363619108
581379549
394047890
45313165
369057355
230323637
280900531
433560470
443738858
643201707
67861883
4293430
80204622
558065854
685316296
279856013
210825924
492017142
257611694
413449325
610859708
460920074
23610481
401158796
26475359
127087919...

result:

ok 200000 lines

Test #9:

score: 0
Accepted
time: 1110ms
memory: 244272kb

input:

200000 798411196 200000
119892 140661
122570 119892
14051 140661
140377 140661
175884 119892
172490 175884
36439 140661
199156 122570
75015 175884
181651 36439
153384 181651
20560 36439
18520 140377
75840 140377
17289 75015
169639 175884
65984 175884
95205 36439
127142 14051
174900 127142
153555 205...

output:

18206054
13921879
554449006
772395766
557255853
520448412
507247136
47917633
376090796
700418943
676359175
214166568
648313632
82067541
125461294
605485604
138967754
244721878
364968617
512562081
576599652
505602437
175819487
616033716
583697253
454913885
471362032
271603982
587870303
24338233
39835...

result:

ok 200000 lines

Test #10:

score: 0
Accepted
time: 1117ms
memory: 244204kb

input:

200000 280159818 200000
164279 83194
111000 83194
77502 83194
48962 164279
131483 48962
197541 164279
179851 197541
93984 111000
98027 93984
93720 77502
116832 98027
111404 93720
5005 197541
36711 197541
106738 98027
190136 48962
23525 164279
12120 23525
132712 5005
102957 98027
197475 98027
55603 9...

output:

39726229
239438494
80597096
247427433
65365333
137798171
72892099
261795854
498099
245220473
50727250
217900240
262134273
277364703
53544683
65461475
91643428
3581860
272885338
217376254
176047124
189818173
84059593
272796564
3704171
235036917
141102972
2640784
276410090
259686566
52790736
80821595
...

result:

ok 200000 lines

Test #11:

score: 0
Accepted
time: 1111ms
memory: 242416kb

input:

200000 464082821 200000
27766 124265
132971 27766
194939 124265
156102 194939
106065 156102
47089 132971
131387 124265
49131 131387
175665 132971
184239 106065
23475 49131
70204 49131
86203 124265
138938 23475
27882 124265
147656 138938
149622 124265
10070 131387
154727 10070
156440 86203
181725 862...

output:

395874707
386956602
220345465
457555611
385827294
42812267
243503528
16329160
307138978
213715808
45053878
381009388
332821716
438672142
61062189
254427850
8489478
270003010
176186699
438163414
390902618
11906359
242145360
286126688
8148311
84288930
148216530
363107387
461882430
23045210
125649908
1...

result:

ok 200000 lines

Test #12:

score: -100
Runtime Error

input:

200000 689377511 200000
140227 172738
172738 119928
119928 83393
83393 178840
178840 6764
6764 142437
142437 14811
14811 146490
146490 136145
136145 101044
101044 147015
147015 41173
41173 46516
46516 170791
170791 61520
61520 2052
2052 135224
135224 194338
194338 44814
44814 77730
77730 21828
21828...

output:


result: