1 条题解

  • 0
    @ 2024-09-16 11:38:48
    #include <bits/stdc++.h>
    using namespace std;
    #define int long long
    const int N = 2e5+10,p = 998244353;
    int n,ans;
    int h[N],e[N],ne[N],w[N],idx;
    
    void add(int a,int b,int c)
    {
        e[idx]=b,w[idx]=c,ne[idx]=h[a],h[a]=idx++;
    }
    
    int siz[N];
    void dfs(int u)
    {
        for(int i=h[u];~i;i=ne[i])
        {
            int j=e[i];
            dfs(j);
            ans=(ans+2ll*w[i]*siz[j]*(n-siz[j]))%p;
            siz[u]+=siz[j];
        }
        siz[u]++;
    }
    
    signed main() 
    {
        memset(h,-1,sizeof h);
        scanf("%lld",&n);
        for(int i=1;i<n;i++)
        {
            int a,b,c;scanf("%lld %lld %lld",&a,&b,&c);
            add(a,b,c);
        }
        dfs(1);
    //  for(int i=1;i<=n;i++)
    //    printf("%lld %lld\n",i,siz[i]);
        printf("%lld\n",ans);
        return 0;
    }
    
  • 1

信息

ID
1002
难度
9
分类
搜索与剪枝数学 点击显示
标签
递交数
6
已通过
1
通过率
17%
上传者