QOJ.ac

QOJ

IDProblemSubmitterResultTimeMemoryLanguageFile sizeSubmit timeJudge time
#225823#5402. 术树数chenxinyang20063 60ms27460kbC++144.7kb2023-10-25 09:53:222023-10-25 09:53:22

Judging History

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

  • [2023-10-25 09:53:22]
  • 评测
  • 测评结果:3
  • 用时:60ms
  • 内存:27460kb
  • [2023-10-25 09:53:22]
  • 提交

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;
}

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

int mo(int x){
	x %= k;
	if(x < 0) x += k;
}

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;
}

int getinv(int a,int b){
	int p,q;
//	printf("getinv %d %d ",a,b);
	assert(exgcd(a,b,p,q) == 1);
	p %= b;
	if(p < 0) p += b;
//	printf("%d\n",p);
	return p;
}

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");

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

		if(!w[i][i] || cur[i] % w[i][i]){//击败事件
			d = __gcd(cur[i],1ll * k);
//			printf("d=%d ",d);
			r = getinv(cur[i] / d,k / d);
			rep(j,0,m - 1) cur[j] = cur[j] * r % 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]);
			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: 0ms
memory: 11880kb

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: 2ms
memory: 9744kb

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: -2
Wrong Answer
time: 1ms
memory: 9776kb

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
0
0
0
0
0
0
0

result:

wrong answer 2nd lines differ - expected: '256', found: '0'

Subtask #2:

score: 0
Skipped

Dependency #1:

0%

Subtask #3:

score: 0
Wrong Answer

Test #21:

score: 11
Accepted
time: 50ms
memory: 23852kb

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: 35ms
memory: 27460kb

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:

0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
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:

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

Subtask #4:

score: 0
Wrong Answer

Test #26:

score: 0
Wrong Answer
time: 39ms
memory: 27072kb

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
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
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:

wrong answer 5th lines differ - expected: '13213440', found: '0'

Subtask #5:

score: 0
Wrong Answer

Test #30:

score: 0
Wrong Answer
time: 60ms
memory: 23568kb

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:

0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
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:

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

Subtask #6:

score: 3
Accepted

Test #33:

score: 3
Accepted
time: 10ms
memory: 24332kb

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: 41ms
memory: 27308kb

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%