hdu 5723 Abandoned country(2016多校第一场) (最小生成树+期望)
Abandoned country
Time Limit: 8000/4000 MS (Java/Others) Memory Limit: 65536/65536 K (Java/Others)
Total Submission(s): 1756 Accepted Submission(s):
475
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.
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.
two decimal places. They separated by a space.
#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多校第一场) (最小生成树+期望)的更多相关文章
- HDU 5723 Abandoned country(落后渣国)
HDU 5723 Abandoned country(落后渣国) Time Limit: 8000/4000 MS (Java/Others) Memory Limit: 65536/65536 ...
- HDU 5723 Abandoned country 最小生成树+搜索
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条边:先构成一棵最小生成树,然后这个最小生成树上求任意两点之间的路径长度和,并求期望 /************** ...
- 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 (最小生成树 + dfs)
Abandoned country 题目链接: http://acm.hdu.edu.cn/showproblem.php?pid=5723 Description An abandoned coun ...
- hdu 5723 Abandoned country 最小生成树 期望
Abandoned country 题目连接: http://acm.hdu.edu.cn/showproblem.php?pid=5723 Description An abandoned coun ...
- HDU 5723 Abandoned country(kruskal+dp树上任意两点距离和)
Problem DescriptionAn abandoned country has n(n≤100000) villages which are numbered from 1 to n. Sin ...
- hdu 5723 Abandoned country 最小生成树+子节点统计
Abandoned country Time Limit: 8000/4000 MS (Java/Others) Memory Limit: 65536/65536 K (Java/Others ...
- HDU 5723 Abandoned country(最小生成树+边两边点数)
http://acm.split.hdu.edu.cn/showproblem.php?pid=5723 题意:给出一个无向图,每条路都有一个代价,求出把所有城市连通的最小代价.在此基础上,国王会从这 ...
随机推荐
- Vue. 之 Element table 单元格内容隐藏
Vue. 之 Element table 单元格内容隐藏 在table显示数据时,若某个单元格的内容过多,需要进行隐层,在这一列的单元格属性添加::show-overflow-tooltip=&quo ...
- 2019.9.16 csp-s模拟测试44 反思总结
虽然说好像没有什么写这个的价值OAO 来了来了来写总结了,不能怨任何东西,就是自己垃圾x 开题顺序又和主流背道而驰,先一头扎进了公认最迷的T2,瞎搞两个小时头铁出来,然后T1和T3爆炸.基础很差,全靠 ...
- oracle习题集-高级查询2
1.列出员工表中每个部门的员工数和部门编号 Select deptno,count(*) from emp group by deptno; 2.列出员工表中,员工人数大于3的部门编号和员工人数 ; ...
- python 数据库风格的DataFrame合并
- linux环境变量设置命令
1echo $ <变量名> //显示某个环境变量 2env // environment (环境) 的简写,列出来所有的环境变量 3set //显示所有本地定义的Shell ...
- myeclipse设置自动热部署
MyEclipse中开发网站项目如何设置关联的Tomcat服务器热启动,即修改项目源代码时不需要每次都重启Tomcat 目前在做一个网站项目,使用MyEclipse+Tomcat,每次修改项目源代码时 ...
- 用Direct2D和DWM来做简单的动画效果
原文:用Direct2D和DWM来做简单的动画效果 版权声明:本文为博主原创文章,未经博主允许不得转载. https://blog.csdn.net/sunnyloves/article/detail ...
- 【水滴石穿】MyFirstRNDemo
比较简单的项目 //index.js /** @format */ import {AppRegistry} from 'react-native'; //默认创建的类 import App from ...
- phpstorm配置Xdebug进行调试PHP教程_php技巧_脚本之家
运行环境: PHPSTORM版本 : 8.0.1 PHP版本 : 5.6.2 xdebug版本:php_xdebug-2.2.5-5.6-vc11-x86_64.dll ps : php版本和xdeb ...
- BOT建设经营转让,PPP公私合作
PPP.BOT两种模式有什么区别? BOT模式(build-operate-transfer),由投资方建设并专营一定期限最后移交政府的方式:PPP模式(public-private-partners ...