题目链接:hdu_5723_Abandoned country

题意:

让你求最小生成树的花费,然后求任给两点的期望路程

题解:

最小生成树大家都会求,Kruskal这里要改改,因为后面要求任意两点的期望路程,我们这里Kruskal 记录下最小生成树的边,然后通过DFS把树建出来,最后找每条边经过了多少次,然后乘上对应的组合,比如样列,第一条边权为1的边,这条边左边只有一个节点,右边有3个节点,那么这条边就会经过3次,所以这条边的贡献就是1(左边点个数)*3(右边点个数)*1(边权),依次类推,然后最后总和除以(n*(n-1)/2),因为任意点对有这么多种组合的方式,这里的数据居然没有设计成最后除会爆double的,所以不用边除边加,当然保险的是边除边加

 #include<cstdio>
#include<algorithm>
#define F(i,a,b) for(int i=a;i<=b;i++)
using namespace std; const int N=1e5+,M=1e6+;
int n,m,g[N],nxt[N*],v[N*],ed,f[N],a[N],sz[N]; inline void adg(int x,int y){v[++ed]=y,nxt[ed]=g[x],g[x]=ed;} struct edge{
int u,v,w;
bool operator<(const edge &b)const{return w<b.w;}
}e[M]; inline int find(int x){return f[x]==x?x:f[x]=find(f[x]);} void Kruskal(int tot=){
sort(e+,e++m);
F(i,,n)f[i]=i;
F(i,,m){
int fu=find(e[i].u),fv=find(e[i].v);
if(fu!=fv)a[++tot]=i,f[fu]=fv;
if(tot==n-)break;
}
} void dfs(int x,int pre){
sz[x]=;
for(int i=g[x];i;i=nxt[i])
if(v[i]!=pre)dfs(v[i],x),sz[x]+=sz[v[i]];
} int main(){
int t;
scanf("%d",&t);
while(t--){
scanf("%d%d",&n,&m);
F(i,,m)scanf("%d%d%d",&e[i].u,&e[i].v,&e[i].w);
Kruskal();
F(i,,n)g[i]=;ed=;
F(i,,n-){
adg(e[a[i]].u,e[a[i]].v);
adg(e[a[i]].v,e[a[i]].u);
}
dfs(,);
double ans=,div=(1.0*n*(n-)/);
long long an=;
F(i,,n-){
int u=e[a[i]].u,v=e[a[i]].v;
if(sz[u]<sz[v])u^=v,v^=u,u^=v;
an+=e[a[i]].w;
ans+=(double)(sz[v])*(n-sz[v])*e[a[i]].w;
}
printf("%lld %.2lf\n",an,ans/div);
}
return ;
}

hdu_5723_Abandoned country(最小生成树)的更多相关文章

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

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

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

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

  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. 最小生成树 kruskal hdu 5723 Abandoned country

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

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

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

  8. HDU5723 Abandoned country (最小生成树+深搜回溯法)

    Description An abandoned country has n(n≤100000) villages which are numbered from 1 to n. Since aban ...

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

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

随机推荐

  1. 38.利用接口做参数,写个计算器,能完成+-*/运算 (1)定义一个接口Compute含有一个方法int computer(int n,int m); (2)设计四个类分别实现此接口,完成+-*/运算 (3)设计一个类UseCompute,含有方法: public void useCom(Compute com, int one, int two) 此方法要求能够:1.用传递过来的对象调用comp

    //接口Compute package jieKou; public interface Compute { int Computer(int n,int m); } //加 package jieK ...

  2. 3.编写Java应用程序。首先定义一个描述银行账户的Account类,包括成员变 量“账号”和“存款余额”,成员方法有“存款”、“取款”和“余额查询”。其次, 编写一个主类,在主类中测试Account类的功能。

    Account package com.hanqi.test; public class Account { private String zhanghao;private double yve; A ...

  3. Sql CE 数据库编程

    用户工具: http://www.linqpad.net/ 查询编辑数据 http://sqlcequery.codeplex.com/  查询编辑数据 开发人员工具: 安装:EF Tools nug ...

  4. 写一个CGI程序并运行

    准备Linux和Apache我在/var/www/cgi-bin/下建一个文件get.c #include <stdio.h> #include <stdlib.h> int ...

  5. 将数据动态加载到Echarts饼图中

    需求描述 Echarts中的官方示例是将数据的设定写好在页面的配置项中的,但在实际的开发展示中,我们需要按照需求通过调用后台的接口获取数据,再将数据加载到特定的Echarts饼图中. 实现效果 实现步 ...

  6. mysql、sqlserver数据库常见数据类型对应java中的的类型探究

    由于本次测试表的结构不涉及到主键的自增长,所以mysql.sqlserver建表语句相同: CREATE TABLE testType ( id INT NOT NULL DEFAULT 0, gen ...

  7. [转载]Winform中Control的Invoke与BeginInvoke方法

    转自http://www.cppblog.com/baby-fly/archive/2010/04/01/111245.html 一.为什么 Control类提供了 Invoke和 BeginInvo ...

  8. JMeter基础

    转载自虫师-http://www.cnblogs.com/fnng/archive/2012/12/21/2828440.html JMeter 介绍: 一个非常优秀的开源的性能测试工具. 优点:你用 ...

  9. sql 生成开始日期到结束日期与开始日期的相差天数

     SELECT    CONVERT(VARCHAR(10), DATEADD(dd, number, '2015-10-25'), 120) AS dtDate          FROM      ...

  10. while循环与i--

    int i = 5;         while(i-- > 0){             System.out.println("i="+i);         } 打印 ...