BZOJ 3754 Tree之最小方差树 解题报告
来源:互联网 发布:js 引用类型 堆 栈 编辑:程序博客网 时间:2024/06/09 03:39
<span style="font-family: arial, verdana, helvetica, sans-serif; font-size: 18px; background-color: rgb(228, 240, 248);">题目大意就是要求一个图的最小方差生成树</span>
<span style="font-family: arial, verdana, helvetica, sans-serif; font-size: 18px; background-color: rgb(228, 240, 248);">点数<=100, 边数<=2000, 1<=边权<=100且为整数</span>
-----------------------------------------------华丽的分割线--------------------------------------------------
My code:
#include <cmath>#include <cstdio>#include <cstring>#include <iostream>#include <algorithm>using namespace std;#define N 100 + 5#define M 2000 + 5#define eps 1e-9 int n, m, Fa[N], W[M], Ord[M];double ave, ans = 1e9; struct Edge{ int u, v; double c; Edge(int _u = 0, int _v = 0, double _c = 0.0) {u = _u, v = _v, c = _c;} bool operator < (const Edge a) const {return c < a.c;}}E[M]; inline int Find(int x){ return x == Fa[x] ? x : Fa[x] = Find(Fa[x]);} inline double MST(int s, int delta){ for (int i = 1; i <= n; i ++) Fa[i] = i; double sum = 0; for (int i = s, cnt = 1; i && i <= m && cnt < n; i += delta) { int t = Ord[i], u = Find(E[t].u), v = Find(E[t].v); if (u != v) { cnt ++; sum += E[t].c; Fa[u] = v; } } return sum;} inline bool cmp(int u, int v){ return E[u].c < E[v].c && abs(E[u].c - E[v].c) > eps;} inline double Solve(int sum){ ave = (double) sum / (n - 1); for (int i = 1; i <= m; i ++) E[i].c = (ave - W[i]) * (ave - W[i]); sort(Ord + 1, Ord + m + 1, cmp); return sqrt(MST(1, 1) / (n - 1));} int main(){ scanf("%d%d", &n, &m); for (int i = 1; i <= m; i ++) { int u, v; scanf("%d%d%d", &u, &v, W + i); E[i] = Edge(u, v, (double) W[i]); Ord[i] = i; } sort(Ord + 1, Ord + m + 1, cmp); int Min = (int) MST(1, 1); int Max = (int) MST(m, -1); for (int i = Min; i <= Max; i ++) { double t = Solve(i); ans = min(ans, t); } printf("%.4lf\n", ans); return 0;}
0 0
- BZOJ 3754 Tree之最小方差树 解题报告
- BZOJ 3754: Tree之最小方差树
- bzoj 3754 Tree之最小方差树
- BZOJ 3754 Tree之最小方差树 MST
- 【BZOJ 3754】【JZOJ 3410]】Tree之最小方差树 -
- 【BZOJ】【P3754】【Tree之最小方差树】【Mst】
- 【BZOJ3754】Tree之最小方差树
- bzoj3754: Tree之最小方差树
- Bzoj3754 Tree之最小方差树 MST
- BZOJ 2429 最小生成树 解题报告
- BZOJ 1601 [Usaco2008 Oct] 最小生成树 解题报告
- BZOJ 1821 [JSOI 2010] 最小生成树 解题报告
- BZOJ 1682 [Usaco2005 Mar] 最小生成树 解题报告
- bzoj 3144 切糕 最小割 解题报告
- BZOJ 1475 最小割 解题报告
- BZOJ 3894 网络流最小割 解题报告
- BZOJ 3144 网络流最小割 解题报告
- BZOJ 2882 后缀数组/最小表示法 解题报告
- CF 235C
- POJ1191——棋盘分割
- syserr,sysout,systrace
- 练习美团的列表
- GIT和SVN之间的区别及基本操作对比
- BZOJ 3754 Tree之最小方差树 解题报告
- ICP in PCL
- MySql_如何在PHP或Java中声明MySQL自定义变量
- Socket的简单实现
- UITableViewCell自定义--代码自定义 和 xib自定义
- ceph与OpenStack整合
- ceph存储 centos上搭建Ceph集群--Best
- slackware软件自动安转工具
- java的poi技术读取和导入Excel