QOJ.ac

QOJ

IDProblemSubmitterResultTimeMemoryLanguageFile sizeSubmit timeJudge time
#79912#5402. 术树数MoQz15 1440ms11724kbC++2.3kb2023-02-21 11:01:562023-02-21 11:01:59

Judging History

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

  • [2023-08-10 23:21:45]
  • System Update: QOJ starts to keep a history of the judgings of all the submissions.
  • [2023-02-21 11:01:59]
  • 评测
  • 测评结果:15
  • 用时:1440ms
  • 内存:11724kb
  • [2023-02-21 11:01:56]
  • 提交

answer

#include<iostream>
#include<cstdio>
using namespace std;
#define fo(i,a,b) for(int i=a;i<=b;++i)
#define fod(i,a,b) for(int i=a;i>=b;--i)
#define ll long long
int read(){
	int u=0;
	char c=getchar();
	while(c>'9'||c<'0')c=getchar();
	while(c>='0'&&c<='9'){
		u=u*10+c-48;
		c=getchar();
	}
	return u;
}
int q,K,m,er[30],n=1;
int gcd(int x,int y){
	if(!y)return x;
	return gcd(y,x%y);
}
int add(int x,int y){
	int u=0;
	fo(i,0,m-1){
		u+=((x/er[i]%K)+(y/er[i]%K))%K*er[i];
	}
	return u;
}
int cf(int x,int y){
	int u=0;
	fo(i,0,m-1){
		u+=((x/er[i]%K)*y%K+K)%K*er[i];
	}
	return u;
}
ll h=0;
pair<ll,ll> kgcd(ll x,ll y){
	if(!y)return {h,0};
	pair<ll,ll>u=kgcd(y,x%y);
	return {u.second,u.first-u.second*(x/y)};
}
int B[33];
int fa[19][200011],deep[200011];
int c[200011];
void check(int i){
	if(K%(B[i]/er[i])!=0){
		h=gcd(K,B[i]);
		pair<ll,ll>u=kgcd(B[i]/er[i],K);
		u.first%=K;
		B[i]=cf(B[i],u.first);
	} 
}
void Ins(int x){
	fod(i,m-1,0){
		if(x/er[i]>0){
			if(!B[i]){
				B[i]=x;
				check(i);
				Ins(cf(x,K/gcd(x/er[i],K)));
				return ;
			}
			while(x/er[i]>0){
				int u=(B[i]/er[i])/(x/er[i]),v=0;
				v=add(B[i],cf(x,-u));
				B[i]=x,x=v;
			}
			check(i);
		}
	}
}
int find(int x,int y){
	if(deep[x]<deep[y])swap(x,y);
	fod(i,18,0){
		if(deep[fa[i][x]]>=deep[y])x=fa[i][x];
	}
	if(x==y)return x;
	fod(i,18,0){
		if(fa[i][x]&&fa[i][x]!=fa[i][y])
		x=fa[i][x],y=fa[i][y];
	}
	return fa[0][x];
}
int main(){
	q=read();
	K=read();
	m=read();
	er[0]=1;
	fo(i,1,m)er[i]=er[i-1]*K;
	deep[1]=1;
	while(q){
		--q;
		int opt=read();
		if(opt==1){
			int x=read(),v=read();
			fa[0][++n]=x;
			fo(i,1,18)fa[i][n]=fa[i-1][fa[i-1][n]];
			deep[n]=deep[x]+1;
			c[n]=add(c[x],v);
			Ins(cf(v,2));
		}
		if(opt==2){
			int x=read(),y=read(),v=read();
			int lca=find(x,y),u=0;
			fo(i,0,m-1){
				u+=((c[x]/er[i]%K)+(c[y]/er[i]%K)+(v/er[i]%K)-(c[lca]/er[i]*2%K)+K)%K*er[i];
			}
			Ins(u);
		}
		if(opt==3){
			int x=read(),y=read();
			int lca=find(x,y),u=0;
			fo(i,0,m-1){
				u+=((c[x]/er[i]%K)+(c[y]/er[i]%K)-(c[lca]/er[i]*2%K)+K)%K*er[i];
			}
			fod(i,m-1,0){
				if(B[i]){					 
					int v=(u/er[i]%K)/(B[i]/er[i]);
					u=add(u,cf(B[i],v));
				}
			}
			printf("%lld\n",u);
		}
	}
	return 0;
}

Details

Tip: Click on the bar to expand more detailed information

Subtask #1:

score: 0
Wrong Answer

Test #1:

score: 0
Wrong Answer
time: 1ms
memory: 3568kb

input:

30 7 3
1 1 301
1 1 236
1 2 278
3 2 4
3 2 4
2 1 4 265
1 1 242
1 4 278
1 6 337
3 2 3
2 5 7 304
2 5 6 34
1 4 178
3 6 7
3 5 7
3 1 4
1 1 178
3 3 4
3 1 6
3 3 4
2 6 7 131
1 1 213
3 1 3
2 3 10 11
3 4 6
2 5 9 169
1 6 9
2 5 10 29
1 9 111
3 9 11

output:

169
169
296
260
156
57
114
218
114
51
181
156

result:

wrong answer 1st lines differ - expected: '0', found: '169'

Subtask #2:

score: 0
Skipped

Dependency #1:

0%

Subtask #3:

score: 0
Wrong Answer

Test #21:

score: 0
Wrong Answer
time: 1440ms
memory: 11724kb

input:

198517 3 16
1 1 40710744
1 2 21885097
1 1 23592366
1 4 7387074
1 5 16074177
1 1 41027400
1 4 18082971
1 2 12822448
1 1 2286557
1 1 27896295
1 11 14532760
1 8 2357296
1 11 9190559
1 6 40503152
3 4 11
3 1 7
3 3 7
3 8 14
3 12 15
3 2 3
1 10 34606866
1 13 42718465
1 16 30353561
3 5 11
3 2 6
3 16 18
1 3 2...

output:

19143570
28246747
25274708
14092484
4035497
36797443
25996871
39043753
17243595
20842774
21813868
555343
41393932
28632187
23716528
40085293
23466024
41030373
27052923
42689887
40280023
16108799
32980600
35380365
33770785
39606071
24594081
39954589
2302915
35563775
6996464
18305479
7159868
34246980
...

result:

wrong answer 1st lines differ - expected: '0', found: '19143570'

Subtask #4:

score: 0
Wrong Answer

Test #26:

score: 0
Wrong Answer
time: 145ms
memory: 9068kb

input:

198891 26426880 1
1 1 0
2 1 2 0
3 1 2
1 1 0
3 2 3
3 1 2
1 2 0
1 2 0
1 3 0
1 6 0
2 1 6 0
2 3 6 0
3 2 3
1 2 13213440
1 2 13213440
1 4 13213440
3 4 10
1 1 13213440
2 3 4 0
2 3 8 13213440
1 1 0
1 12 0
1 13 0
1 3 0
3 2 11
3 2 12
2 11 14 13213440
1 6 0
2 12 14 0
2 1 2 0
1 10 0
1 12 0
2 3 13 0
3 12 14
3 1 ...

output:

0
0
0
0
13213440
13213440
0
0
0
13213440
0
0
13213440
0
13213440
0
13213440
0
13213440
13213440
13213440
13213440
13213440
0
13213440
13213440
0
13213440
13213440
0
0
0
13213440
0
13213440
0
13213440
0
0
0
13213440
13213440
0
13213440
13213440
13213440
13213440
0
13213440
13213440
13213440
13213440
...

result:

wrong answer 520th lines differ - expected: '1468160', found: '24958720'

Subtask #5:

score: 15
Accepted

Test #30:

score: 15
Accepted
time: 1074ms
memory: 9136kb

input:

199458 2 25
1 1 31252443
2 1 2 22827339
1 2 13517756
1 2 5635412
1 3 33397078
1 3 33542998
2 3 5 1484991
3 5 6
2 1 3 7938846
2 1 2 3665458
1 3 29150948
3 4 5
1 3 733545
1 7 4698781
1 7 21699192
1 6 10854390
3 3 8
3 4 8
1 2 6889338
2 1 12 27646676
2 6 8 24407215
1 11 20847453
3 4 13
1 6 16891344
3 4 ...

output:

150016
891079
733545
1048849
7306736
7012
6336311
7310241
705870
794721
112806
777734
2522042
203310
370916
2339461
699806
747148
597151
969956
2633367
376785
884917
884917
331441
2696956
2423527
2304668
2457533
2783258
690228
864462
360811
124716
2098167
48248
2869827
605003
235881
2739062
2861794
...

result:

ok 66461 lines

Test #31:

score: 0
Accepted
time: 1082ms
memory: 9092kb

input:

198986 2 25
1 1 11331234
1 2 24833898
2 1 3 10628416
3 2 3
1 3 6115878
2 2 4 23717273
1 3 18406568
2 2 4 1949969
1 4 6063130
1 6 25760596
3 1 2
3 5 7
3 5 6
3 2 6
3 1 7
1 6 31753825
3 1 4
2 3 4 6115878
3 2 6
2 3 5 22447229
3 1 3
2 3 4 6115878
2 4 7 1813362
3 2 4
2 1 8 8192320
3 3 5
1 7 114729
1 9 188...

output:

969698
11331234
9443776
2324169
990686
1086581
11610035
990686
10628416
1949969
2269429
1949969
571284
3254790
682010
502346
824812
623366
377762
377762
2376509
884877
2316090
2244147
665245
341785
922389
928237
744294
69811
404242
789948
620664
513259
317968
222762
169970
969698
12365
1046658
91964...

result:

ok 65927 lines

Test #32:

score: 0
Accepted
time: 1103ms
memory: 9192kb

input:

198119 2 25
1 1 1988220
2 1 2 10935842
2 1 2 10935842
3 1 2
1 2 9175257
2 1 2 30426983
1 3 21520990
1 2 7244347
2 3 5 19700729
1 3 24753647
3 4 6
2 1 2 30426983
3 2 4
1 6 25686082
2 1 6 22244116
1 7 20608501
3 3 6
1 2 29561714
2 2 3 21107138
1 1 21122181
1 6 7460982
2 7 9 19503627
1 9 8058976
3 1 8
...

output:

1988220
3266481
684956
994474
48107
1167209
4443137
4685362
1360512
4639448
238700
348592
278885
295451
489693
344667
180320
328346
407326
454344
485048
139415
148539
301162
209675
136220
454344
201497
48475
346271
411773
397728
487925
400145
418154
120548
273314
523155
476405
141994
243836
128983
7...

result:

ok 65949 lines

Subtask #6:

score: 0
Wrong Answer

Test #33:

score: 0
Wrong Answer
time: 30ms
memory: 5224kb

input:

49958 1023 2
1 1 122428
1 1 917186
2 2 3 53148
1 3 876461
2 1 3 968146
2 2 4 569341
2 3 4 199413
2 1 4 238371
1 3 127427
1 2 887225
2 1 4 776059
2 4 6 155479
2 1 6 795533
1 5 159578
3 5 6
2 2 5 758778
2 5 6 601115
3 4 7
1 4 202224
2 5 6 902346
3 1 6
3 5 7
3 3 5
1 2 791251
1 5 502214
2 6 7 929048
1 6...

output:

965059
229819
971075
318102
254420
271907
787116
345228
179336
915156
911429
416489
299951
67907
450097
210307
210307
463555
16027
444031
298511
283628
917797
45356
445436
237656
819359
987435
422505
385711
168991
330519
661143
270841
206194
314679
45688
795516
356382
417987
254420
119736
988477
582...

result:

wrong answer 1st lines differ - expected: '0', found: '965059'

Subtask #7:

score: 0
Skipped

Dependency #1:

0%