求助WA85玄关
查看原帖
求助WA85玄关
756179
so_find_skind楼主2023/9/21 13:29
#include<bits/stdc++.h>
#define mod 998244353
using namespace std;
long long n,q;
long long f[200005];

struct eg{
    long long v,w;
};
vector<eg>g[200005];
long long sive[200005];
void dfs(long long u,long long fa){
    sive[u]=1;
    for(long long i=0;i<g[u].size();i++){
        eg v=g[u][i];
        if(v.v!=fa){
            dfs(v.v,u);
            f[u]+=v.w*sive[v.v]%mod+f[v.v];
            f[u]%=mod;
            sive[u]+=sive[v.v];
        }
    }
}
void dfs1(long long u,long long fa){
    for(long long i=0;i<g[u].size();i++){
        eg v=g[u][i];
        if(v.v!=fa){
            f[v.v]=f[u]-sive[v.v]*v.w+(sive[1]-sive[v.v])*v.w;
            f[v.v]%=mod;
            dfs1(v.v,u);
        }
    }
}
long long sum;
signed main(){
    cin>>n>>q;
    for(long long i=1,u,v,w;i<n;i++){
        cin>>u>>v>>w;
        g[u].push_back({v,w});
        g[v].push_back({u,w});
    }
    dfs(1,0);
    dfs1(1,0);
    for(long long i=1;i<=n;i++)
        sum+=f[i];
    for(long long i=1,x,v;i<=q;i++){
        cin>>x>>v;
        cout<<(sum+n*v*2%mod+f[x]*2)%mod<<"\n";
    }
    return 0;
}
2023/9/21 13:29
加载中...