QOJ.ac
QOJ
ID | Problem | Submitter | Result | Time | Memory | Language | File size | Submit time | Judge time |
---|---|---|---|---|---|---|---|---|---|
#97532 | #2918. Tree Number Generator | megz112233 | RE | 1117ms | 244272kb | C++23 | 4.0kb | 2023-04-17 05:42:04 | 2023-04-17 05:42:07 |
Judging History
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...