疑似取模问题,应该是算式出现了负数但是没发现 )
#include<bits/stdc++.h>
#define ll long long
#define F(i,j,n) for(ll i=j;i<=n;i++)
#define D double
#define Test ios::sync_with_stdio(false),cin.tie(nullptr),cout.tie(nullptr)
using namespace std;
const int N=5e6+10;
ll n,m,k,x,y,u,v,w,cnt,ans,t,l,r,len,T,id,q;
ll mn=INT_MAX,mx=0,p=998244353,opt;
ll head[N],sz[N],dep[N],X[N],S[N];
struct Node{
ll nxt,to,dis;
ll u,v;
}tr[N];
void add(ll u,ll v,ll w){
t++;
tr[t].to=v;
tr[t].dis=w;
tr[t].u=u;
tr[t].v=v;
tr[t].nxt=head[u];
head[u]=t;
}
void dfs1(ll u,ll fa){
dep[u]=dep[fa]+1;
sz[u]=1;
for(ll i=head[u];i;i=tr[i].nxt){
ll v=tr[i].to;
if(v!=fa){
dfs1(v,u);
sz[u]+=sz[v];
X[u]+=X[v]+sz[v]*tr[i].dis;
X[u]%=p;
}
}
}
void dfs2(ll u,ll fa){
for(ll i=head[u];i;i=tr[i].nxt){
ll v=tr[i].to;
if(v==fa) continue;
S[v]=(X[u]+S[u])%p-(sz[v]*tr[i].dis%p)-X[v]+(n-sz[v])*tr[i].dis;
S[v]%=p;
dfs2(v,u);
}
}
int main(){
cin>>n>>q;
F(i,1,n-1){
cin>>u>>v>>w;
w%=p;
add(u,v,w);
add(v,u,w);
}
dfs1(1,0);
dfs2(1,0);
F(i,1,t){
if(dep[tr[i].v]<dep[tr[i].u]) ans+=(tr[i].dis*sz[tr[i].u])%p*(n-sz[tr[i].u])%p;
else ans+=(tr[i].dis*sz[tr[i].v])%p*(n-sz[tr[i].v])%p;
ans%=p;
}
F(i,1,q){
cin>>id>>x;
x%=p;
cout<<(ans+2*((X[id]+S[id])%p+n*x)%p)%p<<"\n";
}
return 0;
}