hdu_5723_Abandoned country(最小生成树)
来源:互联网 发布:react.js 中文文档 编辑:程序博客网 时间:2024/06/05 12:07
题目链接: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+7,M=1e6+7;int n,m,g[N],nxt[N*2],v[N*2],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=0){sort(e+1,e+1+m);F(i,1,n)f[i]=i;F(i,1,m){int fu=find(e[i].u),fv=find(e[i].v);if(fu!=fv)a[++tot]=i,f[fu]=fv;if(tot==n-1)break;}}void dfs(int x,int pre){sz[x]=1;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,1,m)scanf("%d%d%d",&e[i].u,&e[i].v,&e[i].w);Kruskal();F(i,1,n)g[i]=0;ed=0;F(i,1,n-1){adg(e[a[i]].u,e[a[i]].v);adg(e[a[i]].v,e[a[i]].u);}dfs(1,1);double ans=0,div=(1.0*n*(n-1)/2);long long an=0;F(i,1,n-1){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 0;}
0 0
- hdu_5723_Abandoned country(最小生成树)
- HDU 5723 Abandoned country 最小生成树
- hdu5723 Abandoned country (最小生成树+期望)
- hdu5723 Abandoned country 最小生成树 + dfs
- HDU5723 Abandoned country (最小生成树+期望)
- HDU 5723-A - Abandoned country-最小生成树+树dp
- TOJ--3073:Country Road 最小生成树(Prim)
- HDU 5723 Abandoned country (最小生成树+树形dp)
- hdu 5723 Abandoned country 最小生成树+DFS
- HDU 5723 Abandoned country(最小生成树 + 树形DP)
- HDU 5723 Abandoned country 最小生成树,树上期望
- HDU 5723 Abandoned country (最小生成树+期望)
- HDU 5723 Abandoned country (最小生成树+dfs)
- ACM2016多校联赛 Abandoned country 最小生成树
- HDU 5723 Abandoned country [最小生成树+dfs]
- HDU 5723 Abandoned country (最小生成树 + 期望值)
- HDU 5723 Abandoned country(最小生成树+DFS)
- HDU 5723 - Abandoned country(最小生成树+dfs)
- UVA 253-Cube painting
- poj3292 Semi-prime H-numbers
- testNg之PowerEmailableReporter
- 随机双色球
- cas 登出界面和登出action的修改
- hdu_5723_Abandoned country(最小生成树)
- c#连接到Mysql
- HDU 1166 敌兵布阵
- 类的继承
- React Native发布APP之签名打包APK
- printf应用
- testNg之RetryListener
- js中几种实用的跨域方法原理详解
- UVA 400-Unix Is