hdu 5723 Abandoned country 最小生成树 期望
Abandoned country
题目连接:
http://acm.hdu.edu.cn/showproblem.php?pid=5723
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
Hint
题意
给你一个无向图,保证边权都不相同,让你求一棵最小生成树。
然后说有一个人在这棵树上瞎选起点和终点,问这个人走路的期望是多少。
题解:
典型的两道傻逼题杂糅在一起的题……
最小生成树跑kruskal
期望的话,考虑边(u,v,c),那么对答案贡献就是size[u] * (n-size[u]) * c * n(n-1)/2
代码
#include<bits/stdc++.h>
using namespace std;
const int maxn = 1000005;
int n,m;
int fa[maxn];
double ans2;
vector<pair<int,int> >E[maxn];
int fi(int u){
return u != fa[u] ? fa[u] = fi( fa[u] ) : u;
}
void uni(int x,int y){
int p=fa[x],q=fa[y];
if(p==q)return;
fa[p]=q;
}
struct node{
int x,y,z;
}p[maxn];
bool cmp(node a,node b){
return a.z<b.z;
}
void init(){
ans2=0;
for(int i=0;i<maxn;i++)fa[i]=i;
memset(p,0,sizeof(p));
for(int i=0;i<maxn;i++)E[i].clear();
}
int dfs(int x,int f){
int sz = 0;
for(int i=0;i<E[x].size();i++){
int v = E[x][i].first;
if(v==f)continue;
int tmp = dfs(v,x);
sz+=tmp;
ans2 = ans2 + 1.0 * tmp * (n-tmp) * E[x][i].second;
}
return sz+1;
}
int main(){
int t;
scanf("%d",&t);
while(t--){
init();
scanf("%d%d",&n,&m);
for(int i=1;i<=m;i++){
scanf("%d%d%d",&p[i].x,&p[i].y,&p[i].z);
}
sort(p+1,p+1+m,cmp);
long long ans = 0;
for(int i=1;i<=m;i++){
int p1=fi(p[i].x),q1=fi(p[i].y);
if(p1==q1)continue;
uni(p1,q1);
ans+=p[i].z;
E[p[i].x].push_back(make_pair(p[i].y,p[i].z));
E[p[i].y].push_back(make_pair(p[i].x,p[i].z));
}
dfs(1,0);
ans2 = ans2 * 1.0 * 2.0 * 1.0 / (1.0* n) / (n - 1.0);
printf("%I64d %.2lf\n",ans,ans2);
}
}
hdu 5723 Abandoned country 最小生成树 期望的更多相关文章
- HDU 5723 Abandoned country 最小生成树+搜索
Abandoned country Time Limit: 8000/4000 MS (Java/Others) Memory Limit: 65536/65536 K (Java/Others ...
- hdu 5723 Abandoned country 最小生成树+子节点统计
Abandoned country Time Limit: 8000/4000 MS (Java/Others) Memory Limit: 65536/65536 K (Java/Others ...
- HDU 5723 Abandoned country (最小生成树+dfs)
题目链接:http://acm.hdu.edu.cn/showproblem.php?pid=5723 n个村庄m条双向路,从中要选一些路重建使得村庄直接或间接相连且花费最少,这个问题就是很明显的求最 ...
- 最小生成树 kruskal hdu 5723 Abandoned country
题目链接:hdu 5723 Abandoned country 题目大意:N个点,M条边:先构成一棵最小生成树,然后这个最小生成树上求任意两点之间的路径长度和,并求期望 /************** ...
- HDU 5723 Abandoned country(落后渣国)
HDU 5723 Abandoned country(落后渣国) Time Limit: 8000/4000 MS (Java/Others) Memory Limit: 65536/65536 ...
- 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(2016多校第一场) (最小生成树+期望)
Abandoned country Time Limit: 8000/4000 MS (Java/Others) Memory Limit: 65536/65536 K (Java/Others ...
- HDU 5723 Abandoned country (最小生成树 + dfs)
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 ...
随机推荐
- ActiveMQ Transport Connectors
一,介绍 ActiveMQ的Transport Connectors 是什么? ActiveMQ是一个消息服务器.作为消息服务器,就会有生产者和消费者来使用它.生产者将消息发送给ActiveMQ,消费 ...
- Linux下sh文件运行及桌面环境双击运行sh文件
sh文件运行: 1.修改为可执行权限: chmod u+x hello.sh 2.运行 ./hello.sh 3.不使用可执行权限修改,用sh直接运行 sh ./hello.sh 桌面环境双击运行sh ...
- C++的Enum hack
从一个例子开始吧 class Game { private: static const int GameTurn = 10; int scores[GameTurn]; }; 对于支持类内初始化的C+ ...
- 20155226 2016-2017-2 《Java程序设计》第6周学习总结
20155226 2016-2017-2 <Java程序设计>第6周学习总结 教材学习内容总结 第十章 输入/输出 10.1 InputStream与OutputStream 1 . 串流 ...
- opacity设定图片透明度
实例 1 - 创建透明图像 定义透明效果的 CSS3 属性是 opacity. 首先,我们将展示如何通过 CSS 来创建透明图像. 常规图像: 带有透明度的相同图像: 请看下面的 CSS: img { ...
- JavaScript 中创建三种消息框:警告框、确认框、提示框。
网址:http://www.w3school.com.cn/js/js_popup.asp 警告框 警告框经常用于确保用户可以得到某些信息. 当警告框出现后,用户需要点击确定按钮才能继续进行操作. 语 ...
- 第9月第26天 pairs和ipairs cocos2dx 动画
1. a={ ip = "127.0.0.1", port = 6789 } for i,v in pairs(a) do print(i,v) end a={1} for i,v ...
- Eric6启动时“无法定位序数4540于动态链接库LIBEAY32.dll”的错误
参考自:https://blog.csdn.net/HongAndYi/article/details/80721478 在安装PyQt5的编程环境时,安装Eric6-17.12后运行eric6,却出 ...
- git 入门常用命令(转)
Git工作流程:D:\projects\Setup2\Setup2\Setup2\Express\SingleImage\DiskImages\DISK1 git clone工作开始之初,可通过git ...
- [转]如何取得当前正在执行的shell脚本的绝对路径?
来源:http://sexywp.com/bash-how-to-get-the-basepath-of-current-running-script.htm 如题,一般我们写Shell脚本的时候,都 ...