hdu5723 最小生成树+DFS(距离和,期望)
来源:互联网 发布:国家药品食品数据查询 编辑:程序博客网 时间:2024/05/21 09:15
题目链接:http://acm.hdu.edu.cn/showproblem.php?pid=5723
题目大意:找出最小生成树以及任意两点间距离的期望。
思路:根据图建立最小生成树,然后DFS求距离和然后求期望即可。
求出来最小生成树需要重新建图,建图需要 双向 边,然后DFS求出每条边贡献的次数,除以总共多少种情况就可以了,,。,,,,,,,
ps:比赛时代码写残疾了**
#include <iostream>#include <cstdio>#include <string>#include <cstring>#include <cmath>#include <stack>#include <queue>#include <algorithm>#include <vector>#include <map>#include <set>#include <stdlib.h>#include <iomanip>using namespace std;#pragma comment(linker, "/STACK:102400000,102400000")#define maxn 100005#define MOD 1000000007#define mem(a , b) memset(a , b , sizeof(a))#define LL long long#define ULL unsigned long long#define FOR(i , n) for(int i = 1 ; i<= n ; i ++)typedef pair<int , int> pii;vector<pii>v[maxn];int per[maxn] , num[maxn];bool vis[maxn];int n , m;LL ans1 ;double ans2;struct node{ int u , v , w;}e[maxn*10];bool cmp(node n1 , node n2){ return n1.w < n2.w;}void add(int fr , int to , int w){ v[fr].push_back(make_pair(to , w)); v[to].push_back(make_pair(fr , w));}int findfa(int x){ if(per[x] == x) return per[x]; else return per[x] = findfa(per[x]);}void Kru(){ for(int i = 0 ; i <= n ; i ++) per[i] = i , v[i].clear(); for(int i = 0 ; i < m ; i ++) { int a = findfa(e[i].u); int b = findfa(e[i].v); if(a != b) { per[b] = a; ans1 += e[i].w; add(min(e[i].u ,e[i].v) , max(e[i].u , e[i].v) , e[i].w); } }}int DFS(int pos , int w){ vis[pos] = 1; int up = v[pos].size(); for(int i = 0 ; i < up ; i ++) { pii pi = v[pos][i]; if(!vis[pi.first]) num[pos] += DFS(pi.first , pi.second); } ans2 += 2.0 * w * (n - num[pos] - 1) * (num[pos] + 1) / n / (n-1); if(up <= 0) return 1; else return num[pos] + 1;}int main(){ int t; cin >> t; while(t --) { scanf("%d %d" , &n , &m); ans1 = ans2 = 0; mem(num , 0);mem(vis , 0); for(int i = 0 ; i < m ; i ++) { scanf("%d %d %d" , &e[i].u , &e[i].v , &e[i].w); } sort(e , e + m , cmp); Kru(); DFS(1 , 0); //cout << ans1 << endl; printf("%lld %.2lf\n" , ans1 , ans2); } return 0;}
0 0
- hdu5723 最小生成树+DFS(距离和,期望)
- hdu5723 Abandoned country (最小生成树+期望)
- HDU5723 Abandoned country (最小生成树+期望)
- hdu5723 Abandoned country 最小生成树 + dfs
- HDU5723 Abandoned country(最小生成树,数学期望)
- hdu5723 Abandoned country(最小生成树+任意点对距离)
- HDU5723(2016多校第一场)——Abandoned country(最小生成树+dfs)
- hdu5723 Abandoned country(最小生成树+期望)(2016多校第一场A题)
- HDU5723 2016 Multi-University Training Contest 1 (最小生成树+dfs)
- HDU5723 2016 Multi-University Training Contest 1 (最小生成树+dfs)
- hdu5723(树形dp+最小生成树)
- hdu5723 最小生成树 树形dp
- hdu5723(16多校第1场,树上两点平均距离的期望)
- (HDU 5723)Abandoned country <最小生成树 + 树上所有两点之间的距离的期望> 多校训练1
- 最小生成树+dfs
- hdu 5723 (最小生成树 + 树上的期望)
- HDU 5723 Abandoned country (最小生成树+期望)
- HDU 5723 (最小生成树/树上的期望)
- ajax、xml、json
- android studio NDK 配置及入门案例
- 处理浏览器的兼容问题之nextSibling
- Leetcode题解 142. Linked List Cycle II
- git修改启动目录和改变项目位置
- hdu5723 最小生成树+DFS(距离和,期望)
- python核心编程学习笔记-2016-07-19-03-局部变量代替模块变量
- MySQL读书笔记-MVCC多版本并发控制
- 游戏编程中的人工智能技术-神经网络入门(四)
- mysql调优
- JAVA_正则表达式(1)
- springmvc 请求参数中文乱码 ,@ResponseBody 返回中文乱码问题
- 大范围移动延时摄影后期去抖总结
- 最短路径Dijkstra算法 java