HDU 2376 Average distance
HDU_2376
对于任意一棵子树来讲,以根节点为深度最浅的点的路径一共有两类,一类是以根节点为端点的路径,另一类是过根节点但端点分别在两棵子树中的路径。然后将无根树转化为有根树后dfs时计算出上面两类路径的长度即可。
#include<stdio.h> #include<string.h> #include<algorithm> #include<queue> #define MAXD 10010 #define MAXM 20010 typedef long long LL; LL f[MAXD], ANS; int N, first[MAXD], size[MAXD], e, next[MAXM], v[MAXM], w[MAXM]; void add(int x, int y, int z) {v[e] = y, w[e] = z;next[e] = first[x], first[x] = e ++; } void init() {int i, x, y, z;scanf("%d", &N);memset(first, -1, sizeof(first[0]) * N), e = 0;for(i = 1; i < N; i ++){scanf("%d%d%d", &x, &y, &z);add(x, y, z), add(y, x, z);} } struct St {LL f;int size;St(){}St(LL _f, int _size) : f(_f), size(_size){} }; void dfs(int cur, int fa) {int i, s = 0;LL A = 0;size[cur] = 1, f[cur] = 0;std::queue <St> q;for(i = first[cur]; i != -1; i = next[i])if(v[i] != fa){dfs(v[i], cur);size[cur] += size[v[i]], f[cur] += f[v[i]] + w[i] * size[v[i]];q.push(St(f[v[i]] + size[v[i]] * w[i], size[v[i]]));}ANS += f[cur];while(!q.empty()){St st = q.front();q.pop();ANS += st.size * A + s * st.f;s += st.size, A += st.f;} } void solve() {ANS = 0;dfs(0, -1);printf("%.7f\n", (double)ANS * 2 / (N * (N - 1))); } int main() {int t;scanf("%d", &t);while(t --){init();solve();}return 0; }
HDU 2376 Average distance相关推荐
- 【HDU - 2376】Average distance (树,平均距离,算贡献)
题干: Given a tree, calculate the average distance between two vertices in the tree. For example, the ...
- HDU 1036 Average is not Fast Enough!:题目解答源码
2019独角兽企业重金招聘Python工程师标准>>> HDU 1036 Average is not Fast Enough!:题目解答源码 A relay is a race f ...
- 【HDU-2376】Average distance
[HDU-2376]Average distance 题意: 给你一个树,求树上任意两个点之间的距离的平均值 题解: 就是求出任意两点之间的距离和然后除以边数 "任意两点之间的距离" ...
- 滑稽树下你和我Average distance(树形dp求任意两点距离之和)
滑稽树下你和我. 链接:https://ac.nowcoder.com/acm/contest/992/J 来源:牛客网 题目描述 红红和蓝蓝是随机降生在苹果树上的苹果仙灵,现在红线仙想估测他们的CP ...
- HDU 4712 Hamming Distance(随机算法)
题目链接:http://acm.hdu.edu.cn/showproblem.php?pid=4712 题目大意:任意两个数按位异或后二进制中含1的个数被称为海明距离,给定n个数,求出任意其中两个最小 ...
- 2013杭电warm up1 hdu 4712 Hamming Distance
题目地址: http://acm.hdu.edu.cn/showproblem.php?pid=4712 首先,算汉明距离就是二进制异或以后的1的个数,统计1的个数用x&=x-1很快很神奇. ...
- hdu 5903 Square Distance
这题题解dp不懂 因为不知道它怎么记录dp的答案的 字符串那么长 我是贪心过得,当时还被四个人hack,都没成功,hhhhh 大意就是优先从头取字典序小的字母,担也要让后面不管怎么取都合法 #incl ...
- 倒角距离(Chamfer distance)
定义:一种对于图像的距离变换(distance transform),常用于shaped based object detection.对于一个有特征点和非特征点的二值图像,此距离变换就是求解每一个点 ...
- HOJ题目分类//放这儿没事刷刷学算法!嘻嘻!
各种杂题,水题,模拟,包括简单数论. 1001 A+B 1002 A+B+C 1009 Fat Cat 1010 The Angle 1011 Unix ls 1012 Decoding Task 1 ...
最新文章
- Flutter:如何使用 CustomPaint 绘制心形
- elementui 如何修改表格里面cell的样式
- java jtable defaulttablemodel_java – JTable和DefaultTableModel
- 前端必须掌握30个CSS3选择器
- 在Mac系统中如何使用App Cleaner Uninstaller Pro清理应用卸载残留?
- 类__slots__与__dict__用法
- 后端如何接收对象类型的数据_javascript基本数据类型赋值和对象引用的内存情况分析...
- linux 与 windows操作系统的区别
- JS仿写刮刮乐小例子
- 快速应对面试--分门别类--7.栈和队列
- 使用嵌套循环打印图形
- 系统cpu主频查看设置
- 估值调整 - 时间调整
- .Net Framework 、.Net 、 .NET Standard的概念与区别
- Unity灯光(light)
- word图文混排复制到FCKEditor图片不显示
- 硬盘的种类、区别、运行原理
- STM32移植到GD32的问题---20170923
- 莫比乌斯函数的两种求法(基于欧拉筛、埃氏筛)
- 你会给父母买保险吗?