hdu 5723 最小生成树+dfs (多校)
来源:互联网 发布:unity3d 模拟重力跳跃 编辑:程序博客网 时间:2024/06/03 16:26
题意:
给出一个图,求最小生成树,然后求一下最小生成树的任意两点之间距离的期望。n<=100000,m<=1000000
分析:
期望=任意两点之间的距离和/(n*(n-1)/2)
每条边对距离和的贡献就是这条边的两端的点数之积,可以任选一个点dfs,那么一条边的贡献就是子结点和父结点两端的点数之积,子结点一端的点数是nun,那么父节点一端的点数就是n-num。贡献就是num*(n-num)*w.
#include<bits/stdc++.h>using namespace std;#define mp make_pairtypedef long long ll;typedef pair<int,int>pii;const int INF=1e9;const int N=100000+9;const int M=1000000+9;struct node{ int u,v,w; bool operator<(const node& rhs)const{ return w<rhs.w; }};node q[M];vector<pii>e[N];double sum;ll ans;int n,m,fa[M];int findfa(int x){return fa[x]==x?x:fa[x]=findfa(fa[x]);}int dfs(int u,int f){ int num=0; for(int i=0;i<e[u].size();i++){ int v=e[u][i].first; if(v==f)continue; int tmp=dfs(v,u); num+=tmp; sum+=1.0*e[u][i].second*tmp*(n-tmp); } return num+1;}void init(){ for(int i=1;i<=n;i++)fa[i]=i,e[i].clear(); ans=0; sum=0;}int main(){ //freopen("f.txt","r",stdin); int T;scanf("%d",&T); while(T--){ scanf("%d%d",&n,&m); init(); for(int i=0;i<m;i++){ scanf("%d%d%d",&q[i].u,&q[i].v,&q[i].w); } sort(q,q+m); for(int i=0;i<m;i++){ int x=findfa(q[i].u),y=findfa(q[i].v); if(x!=y){ fa[x]=y; ans+=q[i].w; e[q[i].u].push_back(mp(q[i].v,q[i].w)); e[q[i].v].push_back(mp(q[i].u,q[i].w)); } } dfs(1,0); printf("%lld %.2lf\n",ans,sum/n/(n-1)*2); } return 0;}
0 0
- HDU 5723(最小生成树+dfs)
- hdu 5723 最小生成树+dfs (多校)
- HDU 5723 - Abandoned country(最小生成树+dfs)
- 2016HDU多校联赛-HDU-5723-Abandoned country(最小生成树 邻接表DFS)
- hdu 5723 Abandoned country 最小生成树+DFS
- HDU 5723 Abandoned country (最小生成树+dfs)
- HDU 5723 Abandoned country [最小生成树+dfs]
- HDU 5723 Abandoned country(最小生成树+DFS)
- HDU 2489 Minimal Ratio Tree(dfs+最小生成树)
- hdu-2489 Minimal Ratio Tree(DFS+最小生成树)
- HDU 2489 DFS枚举+最小生成树
- HDU 4081 最小生成树+dfs
- 最小生成树+dfs
- hdu 2489 Minimal Ratio Tree(dfs枚举 + 最小生成树)~~~
- HDU 2489 Minimal Ratio Tree (dfs+Prim最小生成树)
- hdu 5483 Nux Walpurgis(最小生成树+dfs)
- hdu2489(DFS+最小生成树)
- 2016 Multi-University Training Contest 1-1001---HDU 5723 Abandoned country(DFS+最小生成树)
- UDP RTP 丢包 解决方案AVCom模块API接口使用说明
- C#将文件保存到数据库中或者从数据库中读取文件
- Android View详解(二) 视图绘制流程
- 判断鼠标移入移出元素时的方向
- Linux系统日志及日志分析
- hdu 5723 最小生成树+dfs (多校)
- 2_2用点集绘制函数
- for和foreach效率比较
- 链表的翻转
- js 可折叠展开的简单目录
- Delphi编写数据库程序要点
- iOS开发从入门到精通-- 警告对话框UIAlertView和等待提示器UIActivityIndicatorView
- android studio 打包签名
- 海选女主角 hd 2022