例题:HDU2376   HDU6446(2018CCPC网络赛)

思路:求任意两点间距离和可以转换为->路径长度乘经过路径次数的和。

求经过次数:设这条边两端的点,被经过的次数分别为A和B,那么这条边被经过的次数就是A*B,它对总距离和的贡献就是(A*B*此边长度)。

每条边两端点经过次数的计算,可以用一次dfs解决。

任取一点为根,在dfs的过程中,对每个点k记录其子树包含的点数(包括其自身),设点数为sum[k],则k的父亲一侧的点数即为N-sum[k]。这个统计可以和遍历同时进行。故时间复杂度为O(n)。

HDU2376:求完距离和,再除以总路径数N*(N-1)/2,即为最后所求

HDU6446:根据插点排序的思路,再乘以(N-1)! * 2,即为最后所求

 #include<bits/stdc++.h>
using namespace std; typedef long long ll;
const int maxn = ; int sum[maxn], n;
ll dp[maxn]; struct Edge
{
int v, w;
Edge(int _v = , int _w = )
{
v = _v;
w = _w;
}
};
vector<Edge> tree[maxn]; void dfs(int cur, int father)
{
sum[cur] = ;
for(int i = ; 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] + (n-sum[son]) * sum[son] * len;
}
} int main()
{
int u, v, w, T;
scanf("%d", &T);
while(T--)
{
scanf("%d", &n);
for(int i = ; i < n; i++)
tree[i].clear();
memset(sum, , sizeof(sum));
memset(dp, , sizeof(dp));
for(int i = ; i < n-; i++)
{
scanf("%d%d%d", &u, &v, &w); tree[u].push_back(Edge(v,w));
tree[v].push_back(Edge(u,w));
}
dfs(, -); //设0为根节点
printf("%I64d\n", dp[]); //这里输出的是距离和
}
return ;
}

最新文章

  1. PB gird类型数据窗口 设置分组、分组小计、合计
  2. ORM开发之解析lambda实现group查询(附测试例子)
  3. UNDO内存结构剖析
  4. C# 正则表达式 匹配IP地址
  5. (原创)如何在spannableString中使用自定义字体
  6. poj 2749 Building roads (二分+拆点+2-sat)
  7. treeview递归
  8. ssh username@10.2.1.23无法连接
  9. Hive学习之动态分区及HQL
  10. Jvm虚拟机结构与机制
  11. @vue-cli3创建项目报错:ERROR command failed: npm install --loglevel error --registry=https://registry.npm.taobao.org --di
  12. Android性能优化-线程性能优化
  13. shell变量常用方法
  14. Mvc4_@Styles.Render提高性能
  15. MT【179】最大最小老问题
  16. 基于matplotlib的数据可视化(图形填充fill fill_between) - 笔记(二)
  17. codevs 1070 普通递归关系
  18. JDBC上关于数据库中多表操作一对多关系和多对多关系的实现方法
  19. Vugen 和controller 中的run-time setting区别
  20. java网络编程3-Socket

热门文章

  1. hihoCoder#1181(欧拉路径)
  2. 机器学习:多项式回归(scikit-learn中的多项式回归和 Pipeline)
  3. 如何通过ISO安装win7程序
  4. c++ 图解快速排序算法
  5. JAVA基础知识(13)-----Lock接口
  6. JavaScript基本概念C - 真与假
  7. 第四章 Javac编译原理(待续)
  8. LAMP 2.7 Apache通过rewrite限制某个目录
  9. jetty分析
  10. go语言的第一个helloworld