社区讨论

hack点全爆

P4427[BJOI2018] 求和参与者 2已保存回复 2

讨论操作

快速查看讨论及其快照的属性,并进行相关操作。

当前回复
2 条
当前快照
1 份
快照标识符
@mi868e54
此快照首次捕获于
2025/11/21 09:18
4 个月前
此快照最后确认于
2025/11/21 09:18
4 个月前
查看原帖
CPP
#include<bits/stdc++.h>
#define N 300001
#define MOD 998244353
using namespace std;
void read(int &x){
   char c;
   while(c=getchar(),!isdigit(c)) continue;
   x=c-'0';
   while(c=getchar(),isdigit(c)) x=x*10+c-'0';
}
void write(long long x){
    if(x>=10) write(x/10);
    putchar('0'+x%10);
}
int n,ver[N*2],next[N*2],head[N],tot=0;
void add(int x,int y){ver[++tot]=y,next[tot]=head[x],head[x]=tot;}
int deep[N],lit[N*5],len=0,loc[N];
bool h[N];
int st[N*5][31];
void dfs(int k,int step){
	deep[k]=step;lit[++len]=k,loc[k]=len;
	for(register int i=head[k];i;i=next[i]){
		if(h[ver[i]]) continue;
		h[ver[i]]=1;
		dfs(ver[i],step+1);
		lit[++len]=k;
	}
}
void stwork(){
	int t=log2(len);
	for(register int i=1;i<=len;++i) st[i][0]=lit[i];
	for(register int j=1;j<=t;++j)
	    for(register int i=1;i+(1<<j)-1<=len;++i)
	        deep[st[i][j-1]]<deep[st[i+(1<<(j-1))][j-1]]?st[i][j]=st[i][j-1]:st[i][j]=st[i+(1<<(j-1))][j-1];
}
int have(int x,int y){
	if(x>y) swap(x,y);
	int t=(int)log2(y-x+1);
	if(deep[st[x][t]]<deep[st[y-(1<<t)+1][t]]) return st[x][t];
	else return st[y-(1<<t)+1][t];
}
long long ksm(int x,int y){
	long long ans=1,tmp=x;
	for(;y;y=y>>1,tmp=(tmp*tmp)%MOD)
		y&1?ans=(ans*tmp)%MOD:0;
	return ans;
}
int main(){
	read(n);
	memset(head,0,sizeof(head));
	for(register int i=1;i<=n-1;++i){
		int x,y;read(x),read(y);
		add(x,y),add(y,x);
	}
	memset(h,0,sizeof(h)),h[1]=1;
	dfs(1,0);
	stwork();
	int T;read(T);
	while(T--){
		int x,y,z;scanf("%d%d%d",&x,&y,&z);
		int lca=have(loc[x],loc[y]);
		long long ans=0;
		for(register int i=deep[lca]+1;i<=deep[x];++i) ans=(ans+ksm(i,z))%MOD;
		for(register int i=deep[lca]+1;i<=deep[y];++i) ans=(ans+ksm(i,z))%MOD;
		ans=(ans+ksm(deep[lca],z))%MOD;
		write(ans);putchar('\n');
	}	
	return 0;
}
奆佬们hack点怎么过啊???

回复

2 条回复,欢迎继续交流。

正在加载回复...