博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
树中所有点距离之和
阅读量:4087 次
发布时间:2019-05-25

本文共 1422 字,大约阅读时间需要 4 分钟。

题目描述

红红和蓝蓝是随机降生在苹果树上的苹果仙灵,现在红线仙想估测他们的CP系数,并决定是否使他们成为一对CP。

给出n个结点n-1条边的树,节点编号为1到n,定义distance(i,j)为i与j的树上距离。

CP系数是指所有红红和蓝蓝在不同位置i,j的distance(i,j)之和。

即 ∑i=1n−1∑j=i+1ndistance(i,j)\sum_{i=1}^{n-1}{\sum_{j=i+1}^{n}{distance(i,j)}}∑i=1n−1​∑j=i+1n​distance(i,j)。

求红红和蓝蓝的CP系数,对109+7取模。

输入描述:

第一行一个整数n( 1 < n <= 105 ),表示树的结点个数。

随后n-1行,每行三个整数a,b,c ( 1 <= a,b <= n ),( 0 <= c <= 109 ),表示结点a,b之间有一条权值为c的边,( a ≠\ne​= b )。

输出描述:

一行一个整数,表示CP系数对10

9

+7取模的结果。

示例1

输入

复制

41 2 12 3 12 4 1

输出

复制

9

 

/*

    树形动态规划:

    num[rt]: rt子树有多少节点
    sum[rt]: rt子树中所有子节点到rt的距离之和
    ans:  所有这样的点(i,j)【i,j不在同一条直线上】距离之和
        // sun[rt] 那么也可以表示为在同一直线上两点之和
*/
#include <bits/stdc++.h>
using namespace std;
const int N=1e5+7;
const int mod=1e9+7;
typedef long long LL;
struct node {
    int id;
    LL val;
};
vector <node> g[N];
LL num[N], sum[N];
bool vis[N];
int n; LL ans;
void dfs (int rt) {
    vis[rt]=1;
    for (int i=0;i<g[rt].size();i++) {
        int nxt=g[rt][i].id;
        if (!vis[nxt]) {
            dfs(nxt);
            LL d1=(sum[nxt]+num[nxt]*g[rt][i].val)%mod;
            ans+=(d1*num[rt]%mod+sum[rt]*num[nxt]%mod)%mod;
            num[rt]+=num[nxt];
            sum[rt]=(sum[rt]+d1)%mod;
        }
    }
    num[rt]+=1;
    //printf("rt: %d num: %lld sum: %lld ans: %lld\n",rt, num[rt], sum[rt], ans);
}
int main ()
{
    scanf("%d", &n);
    for (int i=1;i<n;i++) {
        int u, v; LL val; scanf("%d %d %lld", &u, &v, &val);
        node tmp={v, val}; g[u].push_back(tmp);
        tmp.id=u;          g[v].push_back(tmp);
    }
    dfs(1);
    for (int i=1;i<=n;i++)
        ans=(ans+sum[i])%mod;
    printf("%lld\n",ans);
    return 0;
}

转载地址:http://nwuii.baihongyu.com/

你可能感兴趣的文章
C++ STL标准库 算法
查看>>
JVM内存模型_Minor GC笔记
查看>>
SpringCloud学习之PassCloud——(一)PassCloud源代码下载
查看>>
Linux下安装Python环境并部署NLP项目
查看>>
Nginx篇-springCloud配置Gateway+Nginx进行反向代理和负载均衡
查看>>
Nginx篇-Nginx配置动静分离
查看>>
缓存篇-Redis缓存失效以及解决方案
查看>>
缓存篇-使用Redis进行分布式锁应用
查看>>
缓存篇-Redisson的使用
查看>>
phpquery抓取网站内容简单介绍
查看>>
找工作准备的方向(4月22日写的)
查看>>
关于fwrite写入文件后打开查看是乱码的问题
查看>>
用结构体指针前必须要用malloc,不然会出现段错误
查看>>
Linux系统中的美
查看>>
一些实战项目(linux应用层编程,多线程编程,网络编程)
查看>>
我觉得专注于去学东西就好了,与世无争。
查看>>
原来k8s docker是用go语言写的,和现在所讲的go是一个东西!
查看>>
STM32CubeMX 真的不要太好用
查看>>
STM32CubeMX介绍、下载与安装
查看>>
不要买铝合金机架的无人机,不耐摔,易变形弯曲。
查看>>