题目链接:hdu 5723 Abandoned country

题目大意:N个点,M条边;先构成一棵最小生成树,然后这个最小生成树上求任意两点之间的路径长度和,并求期望

/**************************************************************
Problem:hdu 5723
User: youmi
Language: C++
Result: Accepted
Time:2932MS
Memory:22396K
solution:首先注意到任意两条边的边权是不一样的,由此得知最小生成树是唯一的,最小生成树既然是唯一的,
那么期望其实也就是唯一的,不存在什么最小期望。求完最小生成树之后,接下来的问题就可以转换成
在最小生成树上求任意两点之间距离的平均值,对于每条边,统计所 有的路径用到此边的次数,也就
是边的两端的点数之积。那么这条边的总贡献就是次数*边 权。最后得到所有边的贡献之和再除以总路
径数n*(n-1)/2n∗(n−1)/2就是答案。可以OnOn求出。任取一点为根dfs,对每个点ii记录其子树包
含的点数(包括其自身),设点数为sum[i]sum[i],则ii的父亲一侧的点数即为n-sum[i]n−sum[i]。
一边遍历一边统计就行。
****************************************************************/
//#pragma comment(linker, "/STACK:1024000000,1024000000")
//#include<bits/stdc++.h>
#include <iostream>
#include <cstdio>
#include <cstring>
#include <algorithm>
#include <map>
#include <stack>
#include <set>
#include <sstream>
#include <cmath>
#include <queue>
#include <deque>
#include <string>
#include <vector>
#define zeros(a) memset(a,0,sizeof(a))
#define ones(a) memset(a,-1,sizeof(a))
#define sc(a) scanf("%d",&a)
#define sc2(a,b) scanf("%d%d",&a,&b)
#define sc3(a,b,c) scanf("%d%d%d",&a,&b,&c)
#define scs(a) scanf("%s",a)
#define sclld(a) scanf("%I64d",&a)
#define pt(a) printf("%d\n",a)
#define ptlld(a) printf("%I64d\n",a)
#define rep(i,from,to) for(int i=from;i<=to;i++)
#define irep(i,to,from) for(int i=to;i>=from;i--)
#define Max(a,b) ((a)>(b)?(a):(b))
#define Min(a,b) ((a)<(b)?(a):(b))
#define lson (step<<1)
#define rson (lson+1)
#define eps 1e-6
#define oo 0x3fffffff
#define TEST cout<<"*************************"<<endl
const double pi=*atan(1.0); using namespace std;
typedef long long ll;
template <class T> inline void read(T &n)
{
char c; int flag = ;
for (c = getchar(); !(c >= '' && c <= '' || c == '-'); c = getchar()); if (c == '-') flag = -, n = ; else n = c - '';
for (c = getchar(); c >= '' && c <= ''; c = getchar()) n = n * + c - ''; n *= flag;
}
int Pow(int base, ll n, int mo)
{
if (n == ) return ;
if (n == ) return base % mo;
int tmp = Pow(base, n >> , mo);
tmp = (ll)tmp * tmp % mo;
if (n & ) tmp = (ll)tmp * base % mo;
return tmp;
}
//*************************** int n,m;
const int maxn=+;
int T,head[maxn],fa[maxn],vis[maxn];
struct Edge
{
int u,v;
ll w;
void init(int _u,int _v,ll _w)
{
u=_u,v=_v,w=_w;
}
}edge[maxn*];
int get_f(int u)
{
return u==fa[u]?u:fa[u]=get_f(fa[u]);
}
bool cmp(Edge a,Edge b)
{
return a.w<b.w;
}
struct side
{
int v,next;
ll w;
}e[maxn*];
void init()
{
T=;
ones(head);
zeros(vis);
}
void build(int u,int v,ll w)
{
e[T].v=v;
e[T].w=w;
e[T].next=head[u];
head[u]=T++;
}
void kruskal()
{
sort(edge+,edge++m,cmp);
rep(i,,n)
fa[i]=i;
ll sum=;
rep(i,,m)
{
int f1=get_f(edge[i].u);
int f2=get_f(edge[i].v);
if(f1!=f2)
{
fa[f2]=f1;
build(edge[i].u,edge[i].v,edge[i].w);
build(edge[i].v,edge[i].u,edge[i].w);
sum+=edge[i].w;
//j++;
}
}
printf("%I64d ",sum);
}
double tt;
ll dfs(int u)
{
ll num=,temp=;
vis[u]=;
for(int i=head[u];~i;i=e[i].next)
{
int v=e[i].v;
ll w=e[i].w;
if(!vis[v])
{
temp=dfs(v);
tt+=1.0*w*(1.0*(n-temp)*temp);
num+=temp;
}
}
return num;
} void sovle()
{
tt=;
dfs();
tt=tt*2.0/(1.0*n*(n-));
printf("%.2lf\n",tt);
}
int main()
{
#ifndef ONLINE_JUDGE
freopen("in.txt","r",stdin);
#endif
int T_T;
scanf("%d",&T_T);
for(int kase=;kase<=T_T;kase++)
{
sc(n);
sc(m);
init();
int u,v;
ll w;
rep(i,,m)
{
sc2(u,v);sclld(w);
edge[i].init(u,v,w);
}
kruskal();
sovle();
}
}

最小生成树 kruskal 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(落后渣国)

    HDU 5723 Abandoned country(落后渣国) Time Limit: 8000/4000 MS (Java/Others)    Memory Limit: 65536/65536 ...

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

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

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

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

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

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

  6. HDU 5723 Abandoned country(kruskal+dp树上任意两点距离和)

    Problem DescriptionAn abandoned country has n(n≤100000) villages which are numbered from 1 to n. Sin ...

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

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

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

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

  9. HDU 5723 Abandoned country(最小生成树+边两边点数)

    http://acm.split.hdu.edu.cn/showproblem.php?pid=5723 题意:给出一个无向图,每条路都有一个代价,求出把所有城市连通的最小代价.在此基础上,国王会从这 ...

随机推荐

  1. CentOS7 Debian 8 安装VMware-tools

    如在安装过程中碰到未找到gcc 或者 kernel headers的可按以下方案解决,适用任意版本 CentOS 7 1. Update the kernel: $ yum update kernel ...

  2. Linux FTP配置文件说明

    一.vsftpd说明: LINUX下实现FTP服务的软件很多,最常见的有vsftpd,Wu-ftpd和Proftp等.Red Hat Enterprise Linux中默认安装的是vsftpd. 访问 ...

  3. uploadify API

    apifunctionjavascriptflashsecurity服务器 属性: uploader : uploadify.swf 文件的相对路径,该swf文件是一个带有文字BROWSE的按钮,点击 ...

  4. django 中间件

    django处理一个Request的过程是首先通过django 中间件,然后再通过默认的URL方式进行的.所以说我们要做的就是在django 中间件这个地方把所有Request拦截住,用我们自己的方式 ...

  5. Css 学习——left与offsetLeft的区别

    1. 首先一个标签元素的left属性是一个string类型,而offsetLeft是一个numberle类型. 求证: <script> window.onload = function( ...

  6. ArrayList 与 LinkedList

    ArrayList:数组结构,插入删除的效率低,查询的效率较高. LinkedList:链接数据结构,插入删除的效率较高,查询的效率低. 两者的使用 ArrayList:适合用作添加数据,做查询. L ...

  7. ADO.NET provider with invariant name 'System.Data.SqlClient' could not be loaded

    The Entity Framework provider type 'System.Data.Entity.SqlServer.SqlProviderServices, EntityFramewor ...

  8. 对于Oracle analyze table的使用总结 . 对于Oracle analyze table的使用总结 .

    对于Oracle analyze table的使用总结 . 对于Oracle analyze table的使用总结 . analyze table 一般可以指定分析: 表,所有字段,所有索引字段,所有 ...

  9. How to Use Telnet to Test SMTP Communication

    Topic Last Modified: 2005-05-24 Telnet is an extremely useful tool for troubleshooting issues relate ...

  10. Docker: 解决Centos 7中Permission Denied的问题

    当用docker -v挂载volume后,会出现Permission Denied的问题,这有时是因为SeLinux导致的.解决方法如下: chcon -Rt svirt_sandbox_file_t ...