QOJ.ac

QOJ

IDProblemSubmitterResultTimeMemoryLanguageFile sizeSubmit timeJudge time
#560114#5402. 术树数Flamire18 627ms378588kbC++173.0kb2024-09-12 12:44:252024-09-12 12:44:26

Judging History

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

  • [2024-09-12 12:44:26]
  • 评测
  • 测评结果:18
  • 用时:627ms
  • 内存:378588kb
  • [2024-09-12 12:44:25]
  • 提交

answer

#include <bits/stdc++.h>
#define pii pair<int,int>
#define s1 first
#define s2 second
#define N 200011
using namespace std;
int q,k,m,n,pw[55];
struct num{int a[26];num(){memset(a,0,sizeof(a));}num(int _x){for(int i=0;i<m;++i)a[i]=_x/pw[i]%k;}int& operator[](int x){return a[x];}};
num operator+(num a,num b){num c;for(int i=0;i<m;++i)c[i]=(a[i]+b[i])%k;return c;}
num operator-(num a,num b){num c;for(int i=0;i<m;++i)c[i]=(a[i]+k-b[i])%k;return c;}
num operator*(num a,int v){num c;for(int i=0;i<m;++i)c[i]=1ll*a[i]*v%k;return c;}
num operator*(int v,num a){num c;for(int i=0;i<m;++i)c[i]=1ll*a[i]*v%k;return c;}
int fa[N][18],dep[N];num faw[N][18];
num bs[55];
pair<num,num> red(num a,num b,int id)
{
	if(!b[id])return {a,b};
	return red(b,a-(a[id]/b[id])*b,id);
}
void ins(num x)
{//printf("ins(");for(int i=0;i<m;++i)printf("%d ",x.a[i]);printf(")\n");
	for(int i=m-1;~i;--i)if(x[i])
	{
		if(bs[i][i])
		{
			auto tt=red(bs[i],x,i);
			int g=gcd(bs[i][i],x[i]);
			x=bs[i]*(x[i]/g)-x*(bs[i][i]/g);
		}
		else
		{
			bs[i]=x;
			int yy=k/gcd(x[i],k);
			// printf("yy:%d\n",yy);
			x=x*yy;
		}
	}
}
num query(int x,int y)
{
	if(dep[x]<dep[y])swap(x,y);
	num ans;
	for(int i=17;~i;--i)if(dep[x]-(1<<i)>=dep[y])ans=ans+faw[x][i],x=fa[x][i];if(x==y)return ans;
	for(int i=17;~i;--i)if(fa[x][i]^fa[y][i])ans=ans+faw[x][i]+faw[y][i],x=fa[x][i],y=fa[y][i];return ans+faw[x][0]+faw[y][0];
}
int gcd(int a,int b){return !b?a:gcd(b,a%b);}
void exgcd(int a,int b,int &x,int &y)
{
	if(!b){x=1;y=0;return;}
	exgcd(b,a%b,y,x);y-=(a/b)*x;
}
num search(num x)
{
	// printf("search(");for(int i=m-1;~i;--i)printf("%d ",x[i]);printf(")\n");
	// printf("bs:\n");
	// for(int i=m-1;~i;--i)
	// {
	// 	for(int j=m-1;~j;--j)printf("%d ",bs[i][j]);putchar(10);
	// }
	for(int i=m-1;~i;--i)if(bs[i][i])
	{
		int g=gcd(k,bs[i][i]);
		int y=x[i]%g;//printf("i:%d g:%d y:%d\n",i,g,y);
		int kk,t;
		exgcd(bs[i][i],k,kk,t);
		kk=((kk*(y-x[i])/g)%k+k)%k;
		// printf("kk:%d\n",kk);
		x=x+kk*bs[i];
	}
	// printf("fin x:");for(int i=m-1;~i;--i)printf("%d ",x[i]);putchar(10);
	return x;
}
int main()
{
	scanf("%d%d%d",&q,&k,&m);
	pw[0]=1;for(int i=1;i<=m;++i)pw[i]=pw[i-1]*k;
	n=1;
	for(int i=1;i<=q;++i)
	{//printf("------------------------------------------\n");
		int cmd,x,y;
		scanf("%d%d%d",&cmd,&x,&y);
		if(cmd==1)
		{
			++n;
			fa[n][0]=x;faw[n][0]=y;dep[n]=dep[x]+1;
			for(int i=1;i<=17;++i)fa[n][i]=fa[fa[n][i-1]][i-1],faw[n][i]=faw[n][i-1]+faw[fa[n][i-1]][i-1];
			// for(int i=0;(1<<i)<dep[n];++i)
			// {
			// 	printf("faw[%d]:",i);for(int j=0;j<m;++j)printf("%d ",faw[n][i][j]);putchar(10);
			// }
			ins((num)y+(num)y);
		}
		else if(cmd==2)
		{
			int v;scanf("%d",&v);
			ins(query(x,y)+v);
		}
		else
		{
			if(k%2==1)printf("0\n");
			else
			{
				num val=query(x,y);
				// printf("val:");for(int i=0;i<m;++i)printf("%d ",val[i]);putchar(10);
				num ans=search(query(x,y));
				int h=0;
				for(int i=0;i<m;++i)h+=pw[i]*ans[i];
				printf("%d\n",h);
			}
		}
	}
	fclose(stdin);fclose(stdout);return 0;
}

Details

Tip: Click on the bar to expand more detailed information

Subtask #1:

score: 0
Wrong Answer

Test #1:

score: 2
Accepted
time: 36ms
memory: 369532kb

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:

0
0
0
0
0
0
0
0
0
0
0
0

result:

ok 12 lines

Test #2:

score: 2
Accepted
time: 43ms
memory: 370840kb

input:

30 9 3
1 1 694
1 2 251
1 2 623
2 2 4 109
3 3 4
3 1 2
2 2 4 611
1 4 595
2 2 5 477
2 2 5 363
3 1 3
2 1 5 121
1 2 225
2 1 5 214
2 3 6 706
3 3 4
2 2 3 122
2 2 3 621
3 2 3
3 2 4
2 1 5 630
1 5 598
3 4 5
3 1 3
1 2 665
2 1 2 331
2 1 6 449
1 2 387
3 3 6
3 4 6

output:

0
0
0
0
0
0
0
0
0
0

result:

ok 10 lines

Test #3:

score: 0
Wrong Answer
time: 41ms
memory: 369584kb

input:

30 4 5
1 1 854
1 1 467
1 2 708
2 2 4 529
1 4 115
1 4 444
2 3 4 108
2 2 5 724
2 1 3 375
1 5 827
2 5 6 974
1 3 73
3 2 3
2 2 3 140
3 5 6
2 6 8 787
3 1 5
1 5 971
3 4 6
2 4 5 816
3 7 8
3 2 4
1 6 855
2 5 10 39
2 6 9 280
2 6 10 662
3 7 10
1 6 412
3 4 7
1 6 276

output:

5
325
321
276
320
68
257
320

result:

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

Subtask #2:

score: 0
Skipped

Dependency #1:

0%

Subtask #3:

score: 0
Wrong Answer

Test #21:

score: 11
Accepted
time: 395ms
memory: 378508kb

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:

0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
...

result:

ok 99662 lines

Test #22:

score: 0
Wrong Answer
time: 371ms
memory: 378588kb

input:

198073 8 8
1 1 4007183
1 1 411647
1 1 3301064
1 1 2747675
1 3 11141272
1 3 4308435
1 4 15582931
1 5 11340890
1 2 9172283
1 9 542280
1 10 12209796
1 3 2829956
3 1 3
1 3 724504
3 2 14
3 3 14
3 9 12
3 7 10
1 1 3594204
1 14 13600647
1 15 4589767
3 10 14
1 4 10564184
1 13 1781174
1 19 6067505
1 9 6735060...

output:

271947
2098264
74266
79441
2105864
2200657
2175515
2208848
2175578
2195986
66136
2139224
2392584
2134024
2175568
2430464
304640
103424
4610
65554
362049
299595
8211
108107
2425867
2139674
2131521
2373185
5201
294978
102994
2367553
307274
2176002
365130
98880
2467346
2368024
2098184
1048
2434648
3363...

result:

wrong answer 1st lines differ - expected: '262729', found: '271947'

Subtask #4:

score: 0
Wrong Answer

Test #26:

score: 0
Wrong Answer
time: 213ms
memory: 374528kb

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 2628th lines differ - expected: '39680', found: '1468160'

Subtask #5:

score: 15
Accepted

Test #30:

score: 15
Accepted
time: 600ms
memory: 374716kb

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: 15
Accepted
time: 627ms
memory: 375768kb

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: 15
Accepted
time: 622ms
memory: 375596kb

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: 3
Accepted

Test #33:

score: 3
Accepted
time: 78ms
memory: 371712kb

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:

0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
...

result:

ok 16607 lines

Test #34:

score: 3
Accepted
time: 386ms
memory: 376976kb

input:

198392 7 9
1 1 23598910
3 1 2
1 1 25616681
2 1 2 22101090
2 2 3 25455751
3 1 2
3 1 2
1 3 25668120
3 1 3
1 3 23878180
1 4 10885281
1 1 5873751
2 2 7 31608236
3 2 3
3 3 5
2 2 6 37313936
2 1 6 36853293
2 4 7 6773989
2 1 7 19143946
3 2 7
3 3 7
3 1 2
1 1 31756932
3 3 6
2 5 8 39585364
1 2 27162269
3 4 5
2...

output:

0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
...

result:

ok 65758 lines

Subtask #7:

score: 0
Skipped

Dependency #1:

0%