题目链接:https://ac.nowcoder.com/acm/contest/992/J

题意:题意很清晰,就是求任意两点距离的和,结果对1e9+7取模。

思路:裸的树形DP题,一条边的贡献值=这条边的权值×左端连接的顶点数×右端连接的顶点数,所以我们dfs算出点y的子树大小siz[y],x为y的父结点,则x与y连线这条边的一端点的个数为siz[y],另一端点的个数为n-siz[y] ,贡献值即为dis[x,y]*siz[y]*(n-siz[y]),注意取模。

AC代码:

#include<cstdio>
using namespace std; typedef long long LL;
const int MOD=1e9+;
const int maxn=1e5+; struct node{
int v,w,nex;
}edge[maxn<<]; int n,cnt,head[maxn],siz[maxn];
LL ans; void add(int u,int v,int w){
edge[++cnt].v=v;
edge[cnt].w=w;
edge[cnt].nex=head[u];
head[u]=cnt;
} void dfs(int x,int f){
siz[x]=;
for(int i=head[x];i;i=edge[i].nex){
int y=edge[i].v;
if(y==f) continue;
dfs(y,x);
siz[x]+=siz[y];
ans+=1LL*edge[i].w*siz[y]%MOD*(n-siz[y])%MOD;
ans%=MOD;
}
} int main(){
scanf("%d",&n);
for(int i=;i<n;++i){
int u,v,w;
scanf("%d%d%d",&u,&v,&w);
add(u,v,w);
add(v,u,w);
}
dfs(,);
printf("%lld\n",ans);
return ;
}

最新文章

  1. equals和“==”
  2. [转载]Matlab生成Word报告
  3. H2.64的远程回放--开篇
  4. POJ 2676 Sudoku
  5. CCNA training notes
  6. JSP或HTML命名规范
  7. Android滚动截屏,ScrollView截屏
  8. C#中英文混合字符串过长截断
  9. Qt编程之Qt样例表(QSS)
  10. ASP.NET MVC4 json序列化器
  11. JVM可支持的最大线程数(转)
  12. thinkphp学习笔记1—目录结构和命名规则
  13. chapter8_2 预编译
  14. bzoj2194 快速傅立叶之二 ntt
  15. 【Algorithm】字符串编辑距离(Levenshtein距离)C++算法实现
  16. Bean的Scope
  17. vs2010中关于HTML控件与服务器控件分别和js函数混合使用的问题
  18. 雷林鹏分享:jQuery EasyUI 树形菜单 - 创建基础树形网格
  19. Swift - 多个mask的动画效果
  20. 使用C语言操作InfluxDB

热门文章

  1. 什么是URL百分号编码?
  2. pdf缩略图上传控件
  3. 2g 大文件上传
  4. 8.JavaScript
  5. 常用C库函数小结
  6. 原生Js_实现广告弹窗
  7. java连接mysql出现The server time zone value &#39;�й���׼ʱ��&#39; is unrecognized or represents more than...
  8. 【黑马Javaweb】1.1Junit单元测试
  9. LC 244. Shortest Word Distance II 【lock, Medium】
  10. linux系统交互通道