【图论】Tree之最小方差树(bzoj 3754)
正题
bzoj 3754
题目大意
求最小方差生成树
解题思路
可以枚举数值之和,然后跑最小生成树
每次加25,这样可以提高速度,且如果平均数接近,那么所选的边和答案会相同,再暴力跑一遍即可
code
#include<cmath>
#include<cstdio>
#include<cstring>
#include<iostream>
#include<algorithm>
#define ll long long
#define N 110
#define M 2021
using namespace std;
int n,m,x,y,mn,mx,top,d[N],fa[N];
double ans;
struct node
{int x,y;double l,L;
}a[M];
int find(int x)
{return fa[x]==x?x:fa[x]=find(fa[x]);
}
bool cmp(node a,node b)
{return a.l<b.l;
}
double min(double a,double b)
{if(a<b)return a;return b;
}
double tr()
{double sum=0,num=0;top=0;for(int i=1;i<=n;++i)fa[i]=i;for(int i=1;i<=m;++i){x=find(a[i].x);y=find(a[i].y);if(x==y)continue;fa[x]=y;d[++top]=i;if(top==n-1)break;}for(int i=1;i<=top;++i)sum+=a[d[i]].L;sum/=top;for(int i=1;i<=top;++i)num+=(a[d[i]].L-sum)*(a[d[i]].L-sum);return num;
}
int read()
{char c=getchar();int ds=0,fs=1;while (c<'0'||c>'9') {if (x=='-') fs=-1;c=getchar();}while (c>='0'&&c<='9') ds=(ds<<3)+(ds<<1)+c-48,c=getchar();return ds*fs;
}
int main()
{n=read();m=read();for(int i=1;i<=m;++i){a[i].x=read();a[i].y=read();a[i].l=a[i].L=read();}ans=1000000000;for(int k=0;k<=10000;k+=25){for(int i=1;i<=m;++i)a[i].l=(a[i].L-1.0*k/(n-1))*(a[i].L-1.0*k/(n-1));sort(a+1,a+1+m,cmp);ans=min(ans,tr());}printf("%.4lf",sqrt(ans/(n-1)));return 0;
}
【图论】Tree之最小方差树(bzoj 3754)相关推荐
- prim求最短路径C语言,[图论]Prim算法求最小支撑树和最短路径
这个是以前所学,现在总结成博文一篇. 对于图论中的求解最小支撑树问题和最短路径问题都有比较经典的算法,比如最小支撑树可以采用"破圈法",求解最短路径可以用"Dijkstr ...
- P4897 【模板】最小割树(Gomory-Hu Tree)(网络流/最小割/树形结构)
P4897 [模板]最小割树(Gomory-Hu Tree) 这个算法可以用来求解一个无向图上任意两点的最小割,具体过程就是每次选择两个点求最小割,然后在一个新图中这两个点连边,然后对于这两个点的连通 ...
- 【模板】最小割树(Gomory-Hu Tree)
传送门 Description 给定一个\(n\)个点\(m\)条边的无向连通图,多次询问两点之间的最小割 两点间的最小割是这样定义的:原图的每条边有一个割断它的代价,你需要用最小的代价使得这两个点不 ...
- 二叉搜索树-创建最小高度树(递归)
题意: 给定一个有序整数数组,元素各不相同且按升序排列,编写一个算法,创建一棵高度最小的二叉搜索树. 这里回忆一下二叉搜索树的概念: 对于树中的所有子树都有,左子树上的值都小于根节点的值,右子树上的值 ...
- 面试题 04.02. 最小高度树
2020-04-20 1.题目描述 最小高度树 2.题解 递归以及二分求解即可. 注意这里如何取出vector中某个区间内的元素. 3.代码 /*** Definition for a binary ...
- 外排序(最小输者树实现)
问题描述 应用竞赛树结构模拟实现外排序. 基本要求 (1) 设计实现最小输者树结构ADT,ADT中应包括初始化.返回赢者,重构等基本操作. (2) 设计实现外排序,外部排序中的生成最初归并串以及K路归 ...
- 2019-10-12 线性最小方差估计和正交定理
很多东西再看第二遍的时候,都有一种恍然大悟的感觉 参数估计方法 现代控制理论中往往要通过观测值对系统内部结构参数进行估计,类似于我们常用的线性最小二乘法,举例:二维坐标(身高.年龄)给一堆的点,找俩参 ...
- C++kruskals算法生成最小协议树(附完整源码)
C++kruskals算法生成最小协议树 C++kruskals算法生成最小协议树完整源码(定义,实现,main函数测试) C++kruskals算法生成最小协议树完整源码(定义,实现,main函数测 ...
- C++prims算法生成最小协议树(附完整源码)
C++prims算法生成最小协议树 C++实现prims算法生成最小协议树完整源码(定义,实现,main函数测试) C++实现prims算法生成最小协议树完整源码(定义,实现,main函数测试) #i ...
最新文章
- 工作组无法访问计算机用户,工作组计算机无法访问,详细教您工作组计算机无法访问怎么解决...
- C语言实现一个随机测试加减乘除,编写程序:C语言实现一个随堂测试,能进行加减乘除运算...
- 各种水龙头拆卸图解_[各种水龙头拆卸图解]水龙头漏水怎么办
- idea中pom中有些配置为什么不提示_Delegate IDE build/run actions to maven 配置的影响
- Python-读取本地视频转化为图片方法记录(一)
- html form提交heard,德普前妻Amber Heard戛纳合辑
- redis集群工具redis-trib制作并打包上传到私有Harbor
- tplink710n无线打印服务器,tplink710n设置
- 『天涯杂谈』衣食住行小窍门
- shell脚本开头#!/bin/bash和#!/bin/sh是什么意思以及区别
- Java 設計模式 - 適配器模式
- matlab中switch函数用法
- 7-2 符号配对 (20 分) c语言版
- 3*3 三行三列的圈叉棋
- VUE:全局引入.lees文件的CSS变量
- 如何求1^k+2^k+...+n^k
- HTML(二) -- 表格设计
- 文字语义纠错技术探索与实践-张健
- 怎么修改计算机密码界面的背景,操作方法:在Win10中输入密码时如何修改登录界面的背景图片(两种方法)...
- 产品开发中如何衡量产品价值,来做优先级排序?
热门文章
- java spark读写hdfs_Spark读取HDFS数据输出到不同的文件
- linux系统故障实验,Linux常见系统故障排除
- 计算机cnc键代表啥,计算器上的cnc键表示啥
- tars框架php,TarsPHP: TARS-PHP是针对php使用tars二进制协议,以及tars平台整体运维、RPC等一系列能力的解决方案...
- 后端学习 - Java基础
- [蓝桥杯2015决赛]密文搜索
- Phone List POJ - 3630(字典树模板题)
- word List 33
- 选择排序 插入排序 交换排序
- MySQL集群搭建——主备模式