hdu_5723_Abandoned country(最小生成树)
题目链接: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(最小生成树)的更多相关文章
- 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 题目连接: http://acm.hdu.edu.cn/showproblem.php?pid=5723 Description An abandoned coun ...
- 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条双向路,从中要选一些路重建使得村庄直接或间接相连且花费最少,这个问题就是很明显的求最 ...
- Abandoned country(最小生成树+树形DP)
#include<bits/stdc++.h> using namespace std; struct node{ int u, v, w, nex; bool gone; node(){ ...
- 最小生成树 kruskal hdu 5723 Abandoned country
题目链接:hdu 5723 Abandoned country 题目大意:N个点,M条边:先构成一棵最小生成树,然后这个最小生成树上求任意两点之间的路径长度和,并求期望 /************** ...
- HDU 5723 Abandoned country (最小生成树 + dfs)
Abandoned country 题目链接: http://acm.hdu.edu.cn/showproblem.php?pid=5723 Description An abandoned coun ...
- HDU5723 Abandoned country (最小生成树+深搜回溯法)
Description An abandoned country has n(n≤100000) villages which are numbered from 1 to n. Since aban ...
- HDU 5723 Abandoned country 【最小生成树&&树上两点期望】
任意门:http://acm.hdu.edu.cn/showproblem.php?pid=5723 Abandoned country Time Limit: 8000/4000 MS (Java/ ...
随机推荐
- SQL函数学习(四):charindex()函数
秒懂例子: CHARINDEX('SQL', 'Microsoft SQL Server') 返回11: CHARINDEX('7.0', 'Microsoft SQL Server 2000') 返 ...
- Java操作*.properties
java中的properties文件是一种配置文件,主要用于表达配置信息,文件类型为*.properties,格式为文本文件,文件的内容是格式是"键=值"的格式,在properti ...
- php编译错误:Cannot find OpenSSL's <evp.h>
yum install openssl openssl-devel ln -s /usr/lib64/libssl.so /usr/lib/
- javaScript中的一些知识
利用js动态生成table <html xmlns="http://www.w3.org/1999/xhtml"> <head> <meta http ...
- Apache Commons DbUtils 快速上手
原文出处:http://lavasoft.blog.51cto.com/62575/222771 Hibernate太复杂,iBatis不好用,JDBC代码太垃圾,DBUtils在简单与优美之间取得了 ...
- Jena 简介:通过 Jena Semantic Web Framework 在 Jave 应用程序中使用 RDF 模型
简介: RDF 越来越被认为是表示和处理半结构化数据的一种极好选择.本文中,Web 开发人员 Philip McCarthy 向您展示了如何使用 Jena Semantic Web Toolkit,以 ...
- sqlDeveloper连接oracle
1.解决oracle11g的ORA-12505问题 启动oraclehome92TNSlistener服务,启动oracleserviceXXXX,XXXX就是你的database SID. < ...
- C# 反射相关的东西
public class PlugingManager { //插件装载器 public ArrayList Plugins = new ArrayList(); ...
- JavaScript高级程序设计:第十一章
一.选择符API SelectorsAPILevel 1的核心是两个方法:querySelector()和querySelectorAll(). 1. querySelector()方法 queryS ...
- hdu_3001_Travelling(状压DP)
题目连接:http://acm.hdu.edu.cn/showproblem.php?pid=3001 题意:给你N个点,M条边,每个点最多走两次,问走完N个点最短的路程为多少. 题解:注意这题有重边 ...