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相关推荐

  1. 【HDU - 2376】Average distance (树,平均距离,算贡献)

    题干: Given a tree, calculate the average distance between two vertices in the tree. For example, the ...

  2. HDU 1036 Average is not Fast Enough!:题目解答源码

    2019独角兽企业重金招聘Python工程师标准>>> HDU 1036 Average is not Fast Enough!:题目解答源码 A relay is a race f ...

  3. 【HDU-2376】Average distance

    [HDU-2376]Average distance 题意: 给你一个树,求树上任意两个点之间的距离的平均值 题解: 就是求出任意两点之间的距离和然后除以边数 "任意两点之间的距离" ...

  4. 滑稽树下你和我Average distance(树形dp求任意两点距离之和)

    滑稽树下你和我. 链接:https://ac.nowcoder.com/acm/contest/992/J 来源:牛客网 题目描述 红红和蓝蓝是随机降生在苹果树上的苹果仙灵,现在红线仙想估测他们的CP ...

  5. HDU 4712 Hamming Distance(随机算法)

    题目链接:http://acm.hdu.edu.cn/showproblem.php?pid=4712 题目大意:任意两个数按位异或后二进制中含1的个数被称为海明距离,给定n个数,求出任意其中两个最小 ...

  6. 2013杭电warm up1 hdu 4712 Hamming Distance

    题目地址: http://acm.hdu.edu.cn/showproblem.php?pid=4712 首先,算汉明距离就是二进制异或以后的1的个数,统计1的个数用x&=x-1很快很神奇. ...

  7. hdu 5903 Square Distance

    这题题解dp不懂 因为不知道它怎么记录dp的答案的 字符串那么长 我是贪心过得,当时还被四个人hack,都没成功,hhhhh 大意就是优先从头取字典序小的字母,担也要让后面不管怎么取都合法 #incl ...

  8. 倒角距离(Chamfer distance)

    定义:一种对于图像的距离变换(distance transform),常用于shaped based object detection.对于一个有特征点和非特征点的二值图像,此距离变换就是求解每一个点 ...

  9. HOJ题目分类//放这儿没事刷刷学算法!嘻嘻!

    各种杂题,水题,模拟,包括简单数论. 1001 A+B 1002 A+B+C 1009 Fat Cat 1010 The Angle 1011 Unix ls 1012 Decoding Task 1 ...

最新文章

  1. Flutter:如何使用 CustomPaint 绘制心形
  2. elementui 如何修改表格里面cell的样式
  3. java jtable defaulttablemodel_java – JTable和DefaultTableModel
  4. 前端必须掌握30个CSS3选择器
  5. 在Mac系统中如何使用App Cleaner Uninstaller Pro清理应用卸载残留?
  6. 类__slots__与__dict__用法
  7. 后端如何接收对象类型的数据_javascript基本数据类型赋值和对象引用的内存情况分析...
  8. linux 与 windows操作系统的区别
  9. JS仿写刮刮乐小例子
  10. 快速应对面试--分门别类--7.栈和队列
  11. 使用嵌套循环打印图形
  12. 系统cpu主频查看设置
  13. 估值调整 - 时间调整
  14. .Net Framework 、.Net 、 .NET Standard的概念与区别
  15. Unity灯光(light)
  16. word图文混排复制到FCKEditor图片不显示
  17. 硬盘的种类、区别、运行原理
  18. STM32移植到GD32的问题---20170923
  19. 莫比乌斯函数的两种求法(基于欧拉筛、埃氏筛)
  20. 你会给父母买保险吗?

热门文章

  1. Linux下IO多路复用之select函数的使用
  2. java操作word文档,深度解析,值得收藏
  3. java开发工作找不到要放弃吗,年薪50W
  4. 【工作感悟】java编程规范pdf下载
  5. 细数Android开发者的艰辛历程,已拿offer附真题解析
  6. git介绍和常用操作
  7. uoj#388. 【UNR #3】配对树(线段树合并)
  8. 序列化框架MJExtension详解 + iOS ORM框架
  9. 4.kafka的安装部署
  10. Python os 属性(便于跨平台开发)