求调
查看原帖
求调
833682
mxjz666楼主2024/8/19 16:26
#include <bits/stdc++.h>
#define reg register
#pragma  target("avx") 
#pragma  optimize(1) 
#pragma  optimize(2) 
#pragma  optimize(3)
#pragma  optimize("Ofast") 
#pragma  optimize("inline") 
#pragma  optimize("-fgcse") 
#pragma  optimize("-fgcse-lm") 
#pragma  optimize("-fipa-sra") 
#pragma  optimize("-ftree-pre") 
#pragma  optimize("-ftree-vrp") 
#pragma  optimize("-fpeephole2") 
#pragma  optimize("-ffast-math") 
#pragma  optimize("-fsched-spec") 
#pragma  optimize("unroll-loops") 
#pragma  optimize("-falign-jumps") 
#pragma  optimize("-falign-loops") 
#pragma  optimize("-falign-labels") 
#pragma  optimize("-fdevirtualize") 
#pragma  optimize("-fcaller-saves") 
#pragma  optimize("-fcrossjumping")
#pragma  optimize("-fthread-jumps") 
#pragma  optimize("-funroll-loops") 
#pragma  optimize("-fwhole-program") 
#pragma  optimize("-freorder-blocks") 
#pragma  optimize("-fschedule-insns") 
#pragma  optimize("inline-functions") 
#pragma  optimize("-ftree-tail-merge") 
#pragma  optimize("-fschedule-insns2") 
#pragma  optimize("-fstrict-aliasing") 
#pragma  optimize("-fstrict-overflow") 
#pragma  optimize("-falign-functions") 
#pragma  optimize("-fcse-skip-blocks") 
#pragma  optimize("-fcse-follow-jumps") 
#pragma  optimize("-fsched-interblock") 
#pragma  optimize("-fpartial-inlining") 
#pragma  optimize("no-stack-protector") 
#pragma  optimize("-freorder-functions") 
#pragma  optimize("-findirect-inlining") 
#pragma  optimize("-fhoist-adjacent-loads") 
#pragma  optimize("-frerun-cse-after-loop") 
#pragma  optimize("inline-small-functions") 
#pragma  optimize("-finline-small-functions") 
#pragma  optimize("-ftree-switch-conversion") 
#pragma  optimize("-foptimize-sibling-calls") 
#pragma  optimize("-fexpensive-optimizations") 
#pragma  optimize("-funsafe-loop-optimizations") 
#pragma  optimize("inline-functions-called-once") 
#pragma  optimize("-fdelete-null-pointer-checks")
#define int long long 
using namespace std;
const int N=300010;
const int mod=998244353;
int head[N],fa[N][60],dep[N],nxt[N*2],to[N*2];
int n,m,tot,res,ans,vis[N],yu[N][60];
inline int ksm(int a,int b){
	int c=1;
	for(;b;b>>=1){
		if(b&1)c=c*a%mod;
		a=a*a%mod;
	}
	return c;
}
inline int add(int x,int y){
	nxt[++tot]=head[x];
	head[x]=tot;
	to[tot]=y;
}
inline void dfs(int x,int faa){
	dep[x]=dep[faa]+1;
	fa[x][0]=faa;
	for(reg int i=1;i<50;i++)yu[x][i]=(yu[faa][i]+ksm(dep[x],i)+mod)%mod;
	for(reg int i=head[x];i;i=nxt[i]){
		int y=to[i];
		if(y==faa)continue;
		dfs(y,x);
	}
}
inline int lca(int x,int y){
	if(dep[x]>dep[y])swap(x,y);
	for(int i=20;i>=0;i--)if(dep[x]<=dep[y]-(1<<i))y=fa[y][i];
	if(x==y)return x;
	for(reg int i=20;i>=0;i--){
		if(fa[x][i]!=fa[y][i]){
			x=fa[x][i],y=fa[y][i];
		}
	}
	return fa[x][0];
}
inline int read(){
	int s=0,f=1;
	char c=getchar();
	while(c<'0'||c>'9'){
		if(c=='-')f=-1;
		c=getchar();
	}
	while(c>='0'&&c<='9'){
		s=(s*10+c-'0');
		c=getchar();
	}
	return s*f;
}
signed main(){
//	freopen("hjw.txt","r",stdin);
	n=read();
//	cout<<n;
	for(reg int i=1;i<n;i++){
		int x=read(),y=read();
		add(x,y);
		add(y,x);
	}
	dep[1]=-1; 
	dfs(1,1);
	for(reg int j=1;j<=21;j++) for(reg int i=1;i<=n;i++)fa[i][j]=fa[fa[i][j-1]][j-1];
//	for(int i=1;i<=n;i++){
//		for(int j=1;j<=10;j++)cout<<yu[i][j];
//		cout<<endl;
//	}
	int q=read();
	while(q--){
		int x=read(),y=read(),z=read();
		int xy=lca(x,y);
//		cout<<xy<<endl;
		int s1=(yu[x][z]+yu[y][z]+mod)%mod;
		int s2=(yu[xy][z]+yu[fa[xy][0]][z]+mod)%mod;
//		cout<<s1<<" "<<s2<<endl;
		printf("%lld\n",((s1-s2)+mod)%mod);
	}
	return 0;
}
2024/8/19 16:26
加载中...