求树上任意两点的权值和

void dfs(int cur, int father)
{
    sum[cur] = 1;
    for(int i = 0; i < tree[cur].size(); i++)
    {
        int son = tree[cur][i].v;
        ll len = tree[cur][i].w;
        if(father == son)
            continue;
        dfs(son, cur);
        sum[cur] += sum[son];
        dp[cur] += ((dp[son]%mod) + ((n-sum[son])%mod)*sum[son] * len)%mod;
        dp[cur]=dp[cur]%mod;
    }
}

猜你喜欢

转载自blog.csdn.net/yanhu6955/article/details/82957865
今日推荐