Abandoned country

Time Limit: 8000/4000 MS (Java/Others)    Memory Limit: 65536/65536 K (Java/Others)
Total Submission(s): 1756    Accepted Submission(s):
475

Problem Description
An abandoned country has n(n≤100000)
villages which are numbered from 1 to n.
Since abandoned for a long time, the roads need to be re-built. There are m(m≤1000000)
roads to be re-built, the length of each road is wi(wi≤1000000).
Guaranteed that any two wi
are different. The roads made all the villages connected directly or indirectly
before destroyed. Every road will cost the same value of its length to rebuild.
The king wants to use the minimum cost to make all the villages connected with
each other directly or indirectly. After the roads are re-built, the king asks a
men as messenger. The king will select any two different points as starting
point or the destination with the same probability. Now the king asks you to
tell him the minimum cost and the minimum expectations length the messenger will
walk.
 
Input
The first line contains an integer T(T≤10)
which indicates the number of test cases.

For each test case, the first
line contains two integers n,m
indicate the number of villages and the number of roads to be re-built. Next
m
lines, each line have three number i,j,wi,
the length of a road connecting the village i
and the village j
is wi.

 
Output
output the minimum cost and minimum Expectations with
two decimal places. They separated by a space.
 
Sample Input
1
4 6
1 2 1
2 3 2
3 4 3
4 1 4
1 3 5
2 4 6
 
Sample Output
6 3.33
 
 
Author
HIT
 
Source
 
Recommend
wange2014   |   We have carefully selected several
similar problems for you:  5733 5732 5731 5730 5729 
 
这题我完全没有思路,比赛时也不会写,看了别人的代码,貌似懂了一点点。。
 
题意:给了一个图,求最小生成树和期望值,最小生成树指所有的点连接成一条完整的路的最小权值和,期望指图中任意两个点的距离之和除以所有的边的个数(如测试数据:4个点,就是用1-2,1-3,1-4,2-3,2-4,3-4这六条距离的和除以边长总数6)。
 
附上代码:
 
 #include <iostream>
#include <cstdio>
#include <cstring>
#include <algorithm>
#define M 200010
#define ll long long
using namespace std;
ll n,m; struct edge
{
int u,v;
int w;
} e[M*]; struct node
{
int u,v,w;
int ans; ///ans记录经过这条边能达到的边的个数
int next; ///next记录上一次连接的边的序号
}ee[M]; int father[M],head[M]; ///father数组表示根节点,head记录每条边最后一次连接的边的序号
ll ans,sum;
int tol; ll dfs(int u,int p) ///搜索
{
ll num=;
for(int i=head[u];i!=-;i=ee[i].next)
{
if(ee[i].v!=p)
{
ee[i].ans+=dfs(ee[i].v,ee[i].u);
sum+=ee[i].ans*(n-ee[i].ans)*ee[i].w; ///此边能到达的边的个数*能到此边的边的个数*边的长度
// cout<<ee[i].ans<<" "<<n-ee[i].ans<<" "<<ee[i].w<<endl;
//cout<<sum<<endl;
num+=ee[i].ans;
}
}
return num;
} void add_node(edge a) ///建立邻接表
{
ee[tol].u=a.u; ///正向
ee[tol].v=a.v;
ee[tol].w=a.w;
ee[tol].ans=;
ee[tol].next=head[a.u];
head[a.u]=tol++;
ee[tol].u=a.v; ///反向
ee[tol].v=a.u;
ee[tol].w=a.w;
ee[tol].ans=;
ee[tol].next=head[a.v];
head[a.v]=tol++;
} int find(int x) ///搜索根节点
{
while(x!=father[x])
x=father[x];
return x;
} void sourch(int x,int y,int z,edge ss)
{
x=find(x);
y=find(y);
if(x!=y) ///若根节点不相同
{
add_node(ss); ///并且此边存在,建立邻接表
father[x]=y; ///将其连接在一起
ans+=z;
} } void init()
{
ans=,sum=;
int i,j;
for(i=; i<=n; i++)
{
father[i]=i; ///将所有父节点初始定义为自己本身
head[i]=-;
}
tol=;
for(i=; i<m; i++)
{
sourch(e[i].u,e[i].v,e[i].w,e[i]); ///求最小生成树
}
dfs(,-);
ll nn=n*(n-)/;
printf("%I64d %.2lf\n",ans,(double)sum/nn);
} bool cmp(edge a,edge b)
{
return a.w<b.w;
} int main()
{
int T,i;
scanf("%d",&T);
while(T--)
{
scanf("%lld%lld",&n,&m);
for(i=; i<m; i++)
{
scanf("%d%d%d",&e[i].u,&e[i].v,&e[i].w); ///记录每边的数据
}
sort(e,e+m,cmp); ///要选取最小的花费,因此要进行排序
init();
}
return ;
}

hdu 5723 Abandoned country(2016多校第一场) (最小生成树+期望)的更多相关文章

  1. HDU 5723 Abandoned country(落后渣国)

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

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

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

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

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

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

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

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

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

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

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

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

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

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

    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. oracle习题集-高级查询

    1.问题:查询每个员工的部门名称,列出员工姓名和部门名称 select e.ename,d.dname from emp e,dept d where e.deptno=d.deptno 2. 问题: ...

  2. day38 09-Spring类的完整生命周期及后处理Bean

    可以配置Bean的这个类的初始化和销毁的方法. 如何销毁这个bean?销毁必须得手动地关闭掉容器才行.而且销毁必须是在scope="singleton"下才有效.因为如果你scop ...

  3. 洛谷P1029 最大公约数和最小公倍数问题 [2017年6月计划 数论02]

    P1029 最大公约数和最小公倍数问题 题目描述 输入二个正整数x0,y0(2<=x0<100000,2<=y0<=1000000),求出满足下列条件的P,Q的个数 条件: 1 ...

  4. token流程图

  5. windows中将网络共享文件夹映射为网络硬盘

    目的是: 实现局域网,不同电脑之间共享文件. 例如: 计划将A电脑 的文件夹C:\MM ,共享给局域网电脑 B. 局域网所有电脑都可访问: 1. 在A电脑中 共享文件夹..选择‘启用网络发现’   ‘ ...

  6. 如何把一个普通的Eclipse项目改造成Eclipse Plugin项目

    New Project->Plug-in from existing JAR Archive 同时要记得不仅要将你要转换的项目的jar包选上,同时还要将项目依赖的jar包全部选上(要不然会找不到 ...

  7. 【软件安装】python安装numpy、scipy

    python2.7开发环境,若为python3.4的环境则下载对应的软件 系统为64为windows环境,显然不同于32的环境,更繁琐,所谓的网友教程也不尽人意. 安装numpy 下载地址:http: ...

  8. Spring简介+HelloWorld

    IoC Container: 这是最重要的,也是最基础的, Spring的基础.它的作用是配置和Java对象的生命周期管理. DAO, ORM, AOP, WEB: 该模块可用于将工具或框架集成到了S ...

  9. python 模块的导入

  10. 使用multiprocessing的问题总结

    Python2中的multiprocessing模块,规避了GIL(Global Interpreter Lock)带来的多线程无法实际并发的缺点,设计了几乎与threading模块一模一样的API, ...