QOJ.ac

QOJ

IDProblemSubmitterResultTimeMemoryLanguageFile sizeSubmit timeJudge time
#225836#5402. 术树数chenxinyang200618 236ms27464kbC++144.8kb2023-10-25 10:21:232023-10-25 10:21:23

Judging History

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

  • [2023-10-25 10:21:23]
  • 评测
  • 测评结果:18
  • 用时:236ms
  • 内存:27464kb
  • [2023-10-25 10:21:23]
  • 提交

answer

#include <bits/stdc++.h>
#define rep(i,j,k) for(int i=(j);i<=(k);i++)
#define per(i,j,k) for(int i=(j);i>=(k);i--)
#define uint unsigned int
#define ll long long
#define ull unsigned long long
#define db double
#define ldb long double
#define pii pair<int,int>
#define pll pair<ll,ll>
#define mkp make_pair
#define eb emplace_back
#define SZ(S) (int)S.size()
//#define mod 998244353
//#define mod 1000000007
#define inf 0x3f3f3f3f
#define linf 0x3f3f3f3f3f3f3f3f
using namespace std;

template <class T>
void chkmax(T &x,T y){
	if(x < y) x = y;
}

template <class T>
void chkmin(T &x,T y){
	if(x > y) x = y;
}

inline int popcnt(int x){
	return __builtin_popcount(x);
}

inline int ctz(int x){
	return __builtin_ctz(x);
}


/*ll power(ll p,int k = mod - 2){
	ll ans = 1;
	while(k){
		if(k % 2 == 1) ans = ans * p % mod;
		p = p * p % mod;
		k /= 2;	
	}
	return ans;
}*/
int n,Q,k,m;
int opt[200005],_x[200005],_y[200005],_w[200005];

int cnt;
int head[200005];
struct eg{
	int to,nxt,w;
}edge[200005];

void make(int u,int v,int w){
	edge[++cnt].to = v;
	edge[cnt].w = w;
	edge[cnt].nxt = head[u];
	head[u] = cnt;
}

int mo(int x){
	x %= k;
	if(x < 0) x += k;
	return x;
}
ll P[35];
int add(int x,int y){
	int res = 0;
	rep(i,0,m - 1){
		res += P[i] * mo(x + y);
		x /= k;y /= k;
	}
	return res;
}

int sub(int x,int y){
	int res = 0;
	rep(i,0,m - 1){
		res += P[i] * mo(x - y);
		x /= k;y /= k;
	}
	return res;
}

int sum[200005],fa[200005],dep[200005],dfn[200005];	
int ST[20][200005];
void dfs(int u){
	dep[u] = dep[fa[u]] + 1;
	dfn[u] = ++cnt;
	for(int i = head[u];i;i = edge[i].nxt){
		int v = edge[i].to;
		sum[v] = add(sum[u],edge[i].w);
		dfs(v);
	}
}

inline int cmp(int x,int y){
	if(dep[x] < dep[y]) return x;
	return y;
}

inline int qry(int l,int r){
	int x = __lg(r - l + 1);
	return cmp(ST[x][l],ST[x][r - (1 << x) + 1]);
}

inline int LCA(int u,int v){
	if(u == v) return u;
	u = dfn[u];v = dfn[v];
	if(u > v) swap(u,v);
	return fa[qry(u + 1,v)];
}

int getdis(int u,int v){
	int d = LCA(u,v);
	return sub(sub(add(sum[u],sum[v]),sum[d]),sum[d]);
}

ll w[35][35];
int exgcd(int a,int b,int &x0,int &y0){
	if(!b){
		x0 = 1;
		y0 = 0;
		return a;
	}
	int x1,y1;
	int d = exgcd(b,a % b,x1,y1);
	x0 = y1;
	y0 = x1 - (a / b) * y1;
	return d;
}

void insert(int val){
//	printf("insert %d\n",val);
	ll cur[35];
	rep(i,0,m - 1){
		cur[i] = val % k;
		val /= k;
	}
	reverse(cur,cur + m);	
/*	rep(i,0,m - 1) printf("%lld ",cur[i]);
	printf("\n");
	printf("martix w:\n");
	rep(i,0,m - 1){
		rep(j,0,m - 1) printf("%lld ",w[i][j]);
		printf("\n");
	}
	printf("fin\n");*/

	int p,q;
	ll r,temp;
	rep(i,0,m - 1){
		if(!cur[i]) continue;

		if(!w[i][i] || cur[i] % w[i][i]){//击败事件
			if(w[i][i]) exgcd(cur[i],w[i][i],p,q);
			else exgcd(cur[i],k,p,q);

			rep(j,0,m - 1){
				cur[j] = (p * cur[j] + q * w[i][j]) % k;
				if(cur[j] < 0) cur[j] += k;
			}

			rep(j,0,m - 1) swap(cur[j],w[i][j]);
			r = k / w[i][i];
			temp = 0;
			rep(j,0,m - 1) temp += (r * w[i][j] % k) * P[j];
			insert(temp);
		}
		assert(w[i][i]);
		r = cur[i] / w[i][i];
		rep(j,0,m - 1){
			cur[j] = (cur[j] - r * w[i][j]) % k;
			if(cur[j] < 0) cur[j] += k;
		}
	}
//	printf("fin\n");
}

int query(int val){
//	printf("query %d\n",val);
	ll cur[35];
	rep(i,0,m - 1){
		cur[i] = val % k;
		val /= k;
	}
	reverse(cur,cur + m);
//	rep(i,0,m - 1) printf("%lld ",cur[i]);
//	printf("\n");

/*	rep(i,0,m - 1){
		rep(j,0,m - 1) printf("%lld ",w[i][j]);
		printf("\n");
	}
	printf("\n");*/
	rep(i,0,m - 1){
		if(!w[i][i]) continue;
		ll r = cur[i] / w[i][i];
		rep(j,0,m - 1){
			cur[j] = (cur[j] - r * w[i][j]) % k;
			if(cur[j] < 0) cur[j] += k;
		}
//		printf("pos %d\n",i);
//		rep(j,0,m - 1) printf("%lld ",cur[j]);
//		printf("\n");
	}
	reverse(cur,cur + m);
	ll res = 0;
	rep(i,0,m - 1) res += cur[i] * P[i];
//	printf("%lld\n",res);
	return res;
}

int main(){
//	freopen("test.in","r",stdin);
	scanf("%d%d%d",&Q,&k,&m);
	P[0] = 1;
	rep(i,1,m - 1) P[i] = P[i - 1] * k;
	n = 1;
	int _q = 1;
	rep(i,1,Q){
		scanf("%d%d",&opt[_q],&_x[_q]);
		if(opt[_q] == 1){
			scanf("%d",&_w[_q]);
			++n;
			fa[n] = _x[_q];
			make(_x[_q],n,_w[_q]);
			if(k % 2 == 1) insert(_w[_q]);
			continue;
		}
		scanf("%d",&_y[_q]);
		if(opt[_q] == 2) scanf("%d",&_w[_q]);
		_q++;
	}
	Q = _q - 1;
//	rep(i,1,Q) printf("%d %d %d %d\n",opt[i],_x[i],_y[i],_w[i]);
	cnt = 0;
	dfs(1);
	rep(i,1,17){
		rep(j,1,n){
			if(j + (1 << i) - 1 > n) break;
			ST[i][j] = cmp(ST[i - 1][j],ST[i - 1][j + (1 << (i - 1))]);
		}
	}

	rep(i,1,Q){
		if(opt[i] == 2){
			insert(add(getdis(_x[i],_y[i]),_w[i]));
		}else{
			printf("%d\n",query(getdis(_x[i],_y[i])));
		}
	}
	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: 2ms
memory: 12156kb

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: 0
Accepted
time: 1ms
memory: 10044kb

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
Accepted
time: 0ms
memory: 14188kb

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:

0
256
256
256
0
0
0
0

result:

ok 8 lines

Test #4:

score: -2
Wrong Answer
time: 1ms
memory: 14188kb

input:

30 6 4
1 1 1246
1 1 825
1 3 843
2 1 3 186
2 2 3 228
2 1 3 1187
3 2 3
3 1 4
1 3 942
3 1 2
1 5 779
2 3 4 775
2 1 2 275
2 1 3 309
2 5 6 1175
3 2 6
1 6 1084
3 4 6
1 7 176
3 5 6
2 3 8 431
3 2 6
3 1 4
1 8 725
3 7 9
3 1 4
3 6 7
3 2 4
3 1 6
1 5 972

output:

1
6
21
0
0
0
0
0
0
0
0
0
0

result:

wrong answer 3rd lines differ - expected: '7', found: '21'

Subtask #2:

score: 0
Skipped

Dependency #1:

0%

Subtask #3:

score: 0
Wrong Answer

Test #21:

score: 11
Accepted
time: 230ms
memory: 24372kb

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: -11
Wrong Answer
time: 54ms
memory: 27380kb

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:

411647
2779358
1248142
1130483
15207308
11656657
6502335
2331972
14770152
16499332
13200222
7005644
16239550
15374366
15802340
6755104
13559734
9484672
8534966
5334052
2075493
9215835
4335027
14258127
12002585
2859576
14740049
12333779
9073141
13935830
121682
7219571
8837630
3349778
9418700
13337584...

result:

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

Subtask #4:

score: 0
Wrong Answer

Test #26:

score: 19
Accepted
time: 39ms
memory: 26980kb

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:

ok 66344 lines

Test #27:

score: -19
Wrong Answer
time: 39ms
memory: 23872kb

input:

199011 22494024 1
1 1 11247012
1 1 11247012
2 1 2 11247012
3 1 3
1 3 11247012
2 1 4 0
1 1 11247012
1 2 11247012
2 4 5 11247012
3 1 2
1 5 0
3 2 5
2 5 6 11247012
2 2 3 0
1 1 11247012
3 4 8
2 1 5 11247012
3 5 7
1 6 11247012
1 4 0
3 1 7
2 1 9 11247012
1 7 11247012
2 3 4 11247012
3 4 5
2 1 9 11247012
3 5...

output:

11247012
11247012
0
11247012
0
11247012
11247012
11247012
0
11247012
0
0
0
11247012
11247012
11247012
11247012
11247012
11247012
11247012
0
11247012
11247012
11247012
11247012
11247012
11247012
0
0
0
11247012
11247012
11247012
0
0
0
0
11247012
0
11247012
11247012
0
11247012
0
0
11247012
0
11247012
1...

result:

wrong answer 4191st lines differ - expected: '0', found: '1606716'

Subtask #5:

score: 15
Accepted

Test #30:

score: 15
Accepted
time: 233ms
memory: 27464kb

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: 236ms
memory: 22580kb

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: 233ms
memory: 27456kb

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: 12ms
memory: 24712kb

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: 0
Accepted
time: 128ms
memory: 24312kb

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%