题目链接: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(最小生成树,期望)的更多相关文章

  1. hdu 5723 Abandoned country 最小生成树 期望

    Abandoned country 题目连接: http://acm.hdu.edu.cn/showproblem.php?pid=5723 Description An abandoned coun ...

  2. HDU 5723 Abandoned country 最小生成树+搜索

    Abandoned country Time Limit: 8000/4000 MS (Java/Others)    Memory Limit: 65536/65536 K (Java/Others ...

  3. hdu 5723 Abandoned country 最小生成树+子节点统计

    Abandoned country Time Limit: 8000/4000 MS (Java/Others)    Memory Limit: 65536/65536 K (Java/Others ...

  4. HDU 5723 Abandoned country (最小生成树+dfs)

    题目链接:http://acm.hdu.edu.cn/showproblem.php?pid=5723 n个村庄m条双向路,从中要选一些路重建使得村庄直接或间接相连且花费最少,这个问题就是很明显的求最 ...

  5. Abandoned country(最小生成树+树形DP)

    #include<bits/stdc++.h> using namespace std; struct node{ int u, v, w, nex; bool gone; node(){ ...

  6. HDU 5723 Abandoned country 【最小生成树&&树上两点期望】

    任意门:http://acm.hdu.edu.cn/showproblem.php?pid=5723 Abandoned country Time Limit: 8000/4000 MS (Java/ ...

  7. HDU 5723:Abandoned country(最小生成树+算期望)

    http://acm.hdu.edu.cn/showproblem.php?pid=5723 Abandoned country Problem Description   An abandoned ...

  8. hdu 5723 Abandoned country(2016多校第一场) (最小生成树+期望)

    Abandoned country Time Limit: 8000/4000 MS (Java/Others)    Memory Limit: 65536/65536 K (Java/Others ...

  9. 最小生成树 kruskal hdu 5723 Abandoned country

    题目链接:hdu 5723 Abandoned country 题目大意:N个点,M条边:先构成一棵最小生成树,然后这个最小生成树上求任意两点之间的路径长度和,并求期望 /************** ...

随机推荐

  1. 似是而非的k=sqrt(n)

    //题目:输入一个大于3的整数n,判定它是否为素数(prime,又称质数)#include <stdio.h>#include <math.h>int main(){int n ...

  2. 最长上升子序列O(nlogn)算法详解

    最长上升子序列 时间限制: 10 Sec   内存限制:128 MB 题目描述 给定一个序列,初始为空.现在我们将1到N的数字插入到序列中,每次将一个数字插入到一个特定的位置.我们想知道此时最长上升子 ...

  3. spring.xml命名空间

    <beans xmlns="http://www.springframework.org/schema/beans" xmlns:xsi="http://www.w ...

  4. Pascal's Triangle II

    class Solution { public: vector<int> getRow(int rowIndex) { vector<int> v; ) return v; v ...

  5. Centos6.5和Centos7 php环境搭建如何实现呢

    首先我们先查看下centos的版本信息 代码如下: #适用于所有的linux lsb_release -a#或者cat /etc/redhat-release#又或者rpm -q centos-rel ...

  6. [PHP100] PHP如何防止注入及开发安全

    1.PHP注入的基本原理 程序员的水平及经验也参差不齐,相当大一部分程序员在编写代码的时候,没有对 用户输入数据的合法性进行判断,使应用程序存在安全隐患.用户可以提交一段数据 库查询代码,根据程序返回 ...

  7. apache支持中文域名绑定,apache支持中文域名绑定,教你怎样让apache支持中文域名绑定

    摘要:apache支持中文域名绑定,apache支持中文域名绑定,教你怎样让apache支持中文域名绑定,根据本人实际经验,叫你如何让apache支持中文域名绑定,绝对管用的让apache支持中文域名 ...

  8. 什么情况下用+运算符进行字符串连接比调用StringBuffer/StringBuilder对象的append性能好

    如果在编写代码的过程中大量使用+进行字符串评价还是会对性能造成比较大的影响,但是使用的个数在1000以下还是可以接受的,大于10000的话,执行时间将可能超过1s,会对性能产生较大影响.如果有大量需要 ...

  9. YTU 2019: 鞍点计算

    2019: 鞍点计算 时间限制: 1 Sec  内存限制: 64 MB 提交: 66  解决: 30 题目描述 找出具有m行n列二维数组Array的"鞍点",即该位置上的元素在该行 ...

  10. YTU 3019: 螺旋方阵

    3019: 螺旋方阵 时间限制: 1 Sec  内存限制: 128 MB 提交: 2  解决: 2 题目描述 以下是一个5*5阶螺旋方阵.设计一个程序,输出该形式的n*n阶方阵(顺时针方向旋进).   ...