[HDOJ5723]Abandoned country(最小生成树,期望)
题目链接:http://acm.hdu.edu.cn/showproblem.php?pid=5723
题意:求最小生成树,并且求这棵最小生成树上所有边走过次数的期望。
走过次数的期望=Σ边被走过次数*边权/(n*(n-1)/2)
求边被走过的次数,相当于关心这个边的两侧分别有多少点,走的次数就是两边的点数的乘积这个很好理解。可以从边的一侧开始dfs,找到这个边的一侧点数x,由于最小生成树是联通的,那么边的另一侧点数一定是n-x。所以这条边的贡献是(n-x)*x*w。
#include <bits/stdc++.h>
using namespace std; typedef long long LL;
typedef struct Edge {
int v, next;
LL w;
}Edge; typedef struct E {
int u, v;
LL w;
}E;
const int maxn = ;
const int maxm = ;
int n, m;
E e[maxm<<];
Edge edge[maxm<<];
int head[maxn], ecnt;
int pre[maxn];
LL ret1, ret2; int find(int x) {
return x == pre[x] ? x : pre[x] = find(pre[x]);
} bool unite(int x, int y) {
x = find(x); y = find(y);
if(x != y) {
pre[x] = y;
return ;
}
return ;
} void init() {
memset(head, -, sizeof(head));
ecnt = ; ret1 = ; ret2 = ;
for(int i = ; i <= n; i++) pre[i] = i;
} void adde(int u, int v, LL w) {
edge[ecnt].v = v; edge[ecnt].w = w; edge[ecnt].next = head[u]; head[u] = ecnt++;
edge[ecnt].v = u; edge[ecnt].w = w; edge[ecnt].next = head[v]; head[v] = ecnt++;
} bool cmp(E a, E b) {
return a.w < b.w;
} int dfs(int u, int p) {
int siz = ;
for(int i = head[u]; ~i; i=edge[i].next) {
int v = edge[i].v; LL w = edge[i].w;
if(p == v) continue;
int pre = dfs(v, u);
siz += pre;
ret2 += (LL)pre * (LL)(n - pre) * w;
}
return siz;
} int main() {
//freopen("in", "r", stdin);
int T, u, v;
LL w;
scanf("%d", &T);
while(T--) {
scanf("%d%d",&n,&m);
init();
for(int i = ; i < m; i++) {
scanf("%d%d%lld",&u,&v,&w);
e[i].u = u; e[i].v = v; e[i].w = w;
}
sort(e, e+m, cmp);
for(int i = ; i < m; i++) {
u = e[i].u; v = e[i].v; w = e[i].w;
if(unite(u, v)) {
ret1 += w;
adde(u, v, w);
}
}
dfs(, -);
LL k = n * (n - );
printf("%lld %.2lf\n", ret1, 2.0*ret2/(double)k);
}
return ;
}
[HDOJ5723]Abandoned country(最小生成树,期望)的更多相关文章
- hdu 5723 Abandoned country 最小生成树 期望
Abandoned country 题目连接: http://acm.hdu.edu.cn/showproblem.php?pid=5723 Description An abandoned coun ...
- HDU 5723 Abandoned country 最小生成树+搜索
Abandoned country Time Limit: 8000/4000 MS (Java/Others) Memory Limit: 65536/65536 K (Java/Others ...
- hdu 5723 Abandoned country 最小生成树+子节点统计
Abandoned country Time Limit: 8000/4000 MS (Java/Others) Memory Limit: 65536/65536 K (Java/Others ...
- HDU 5723 Abandoned country (最小生成树+dfs)
题目链接:http://acm.hdu.edu.cn/showproblem.php?pid=5723 n个村庄m条双向路,从中要选一些路重建使得村庄直接或间接相连且花费最少,这个问题就是很明显的求最 ...
- Abandoned country(最小生成树+树形DP)
#include<bits/stdc++.h> using namespace std; struct node{ int u, v, w, nex; bool gone; node(){ ...
- HDU 5723 Abandoned country 【最小生成树&&树上两点期望】
任意门:http://acm.hdu.edu.cn/showproblem.php?pid=5723 Abandoned country Time Limit: 8000/4000 MS (Java/ ...
- HDU 5723:Abandoned country(最小生成树+算期望)
http://acm.hdu.edu.cn/showproblem.php?pid=5723 Abandoned country Problem Description An abandoned ...
- hdu 5723 Abandoned country(2016多校第一场) (最小生成树+期望)
Abandoned country Time Limit: 8000/4000 MS (Java/Others) Memory Limit: 65536/65536 K (Java/Others ...
- 最小生成树 kruskal hdu 5723 Abandoned country
题目链接:hdu 5723 Abandoned country 题目大意:N个点,M条边:先构成一棵最小生成树,然后这个最小生成树上求任意两点之间的路径长度和,并求期望 /************** ...
随机推荐
- Sql Server 检测死锁的SQL语句
首先创建一个标量值函数DigLock,用来递归检测SqlServer中的每一个会话是否存在加锁循环,如果该函数最终返回1则表示检测到了加锁循环 (也就是说检测到了死锁),如果最终返回0则表示没有检测到 ...
- nodejs和mongodb实践
首先,当然是都安装了nodejs 和mongodb了.这必须是前提条件. 现在我们要用nodejs连接mongodb数据库了.我这里只是一个非常非常简单是实践,初学嘛.更深入的学习之后,我会仔细写笔记 ...
- linux端口
1.查看开放的端口 netstat -anp 来查看哪些端口被打开. 注:加参数'-n'会将应用程序转为端口显示,即数字格式的地址,如:nfs->2049, ftp->21,因此可以开启两 ...
- 160921、React入门教程第一课--从零开始构建项目
工欲善其事必先利其器,现在的node环境下,有太多好用的工具能够帮助我们更好的开发和维护管理项目. 我本人不建议什么功能都自己写,我比较喜欢代码复用.只要能找到npm包来实现的功能,坚决不自己敲代码. ...
- cronolog日志切割
1. 下载安装 cronolog,它的主页 http://cronolog.org . 下载的是源码,安装过程就是 ./configure, make, make install,最后一步可直接把 s ...
- sql中的小细节
1.SUM与COUNT的区别 SUM是对符合条件的记录的数值列求和 COUNT 是对查询中符合条件的结果(或记录)的个数 2 select name as 姓名,tel from...where.. ...
- gridview 经典
一.gridview 中弹出超链接 <%--好方法:超链接列中可以直接从数据库获取完整字段,然后选择在当前窗口打开 Target="mainframe" --%> &l ...
- 20145227 《Java程序设计》第1周学习总结
20145227 <Java程序设计>第1周学习总结 教材学习内容总结 第一周学习Java首先了解了Java的历史,区分了JRE和JDK,并且学会了安装和配置环境.人机交互等基本知识,会编 ...
- 各种drawable
BitmapDrawable 可以把小图片平铺布满布局来设置背景. PictureDrawable 记录绘制过程 ClipDrawable 裁剪 进度条 InsetDrawabl ...
- java 同步锁方法
方法一:动态同步锁 class Demo_thread implements Runnable{ public static int sum = 0; public synchronized void ...