3754: Tree之最小方差树

Time Limit: 20 Sec  Memory Limit: 256 MB
Submit: 402  Solved: 152
[Submit][Status][Discuss]

Description

Wayne在玩儿一个很有趣的游戏。在游戏中,Wayne建造了N个城市,现在他想在这些城市间修一些公路,当然并不是任意两个城市间都能修,为了道路系统的美观,一共只有M对城市间能修公路,即有若干三元组 (Ui,Vi,Ci)表示Ui和Vi间有一条长度为Ci的双向道路。当然,游戏保证了,若所有道路都修建,那么任意两城市可以互相到达。Wayne拥有恰好N-1支修建队,每支队伍能且仅能修一条道路。当然,修建长度越大,修建的劳累度也越高,游戏设定是修建长度为C的公路就会有C的劳累度。当所有的队伍完工后,整个城市群必须连通,而这些修建队伍们会看看其他队伍的劳累情况,若劳累情况差异过大,可能就会引发骚动,不利于社会和谐发展。Wayne对这个问题非常头疼,于是他想知道,这N1支队伍劳累度的标准差最小能有多少。
标准差的定为:设有N个数,分别为ai,它们的平均数为 ,那么标准差就是
 
 

Input

第一行两个正整数N,M
接下来M行,每行三个正整数Ui,Vi,Ci
 

Output

输出最小的标准差,保留四位小数。

Sample Input

3 3
1 2 1
2 3 2
3 1 3

Sample Output

0.5000

HINT

N<=100,M<=2000,Ci<=100
 

Source

 

[Submit][Status][Discuss]

HOME Back

此题要最小化$\sqrt{\frac{\sum\limits_{a_i\in S}(a_i-\bar a)^2}{n-1}}$等价于最小化$\sum\limits_{a_i\in S}(a_i-\bar a)^2$ 其中S中的所有边组成一个生成树

设$f(x)=\sum\limits_{a_i\in S}(a_i-x)^2$,则$f(x)=\sum\limits_{a_i \in S}(x^2-2*a_i*x+a_i^2)$其中当$x=\bar a$时取得最小值。

所以可以枚举平均值x,然后求最小生成树,求出来的边如果平均值不等于x。当枚举到他们的平均值时,答案一定比当前小,统计最小值即可。

 #include<cmath>
#include<cstdio>
#include<cstring>
#include<algorithm>
#define N 105
#define M 2010
#define sqr(x) ((x)*(x))
using namespace std;
int n,m,tot,f[N];double ans=1e9;
int find(int x){return f[x]==x?x:f[x]=find(f[x]);}
struct edge{int x,y,c;double w;}e[M];
inline bool operator<(edge x,edge y){return x.w<y.w;}
double solve()
{
for(int i=;i<=n;i++)f[i]=i;
int tot=;double sum=;
for(int i=;tot!=n-;i++)
{
int fx=find(e[i].x),fy=find(e[i].y);
if(fx==fy)continue;
tot++;
f[fx]=fy;
sum+=e[i].w;
}
return sum;
}
int main()
{
scanf("%d%d",&n,&m);
for(int i=;i<=m;i++)
scanf("%d%d%d",&e[i].x,&e[i].y,&e[i].c),e[i].w=e[i].c;
int Min,Max;
sort(e+,e+m+);
Min=solve();
reverse(e+,e+m+);
Max=solve();
for(int i=Min;i<=Max;i++)
{
double ave=i*1.0/(n-);
for(int j=;j<=m;j++)
e[j].w=sqr(e[j].c-ave);
sort(e+,e+m+);
ans=min(ans,solve());
}
printf("%.4lf\n",sqrt(ans/(n-)));
}

[BZOJ3754]Tree之最小方差树的更多相关文章

  1. [BZOJ3080]Minimum Variance Spanning Tree/[BZOJ3754]Tree之最小方差树

    [BZOJ3080]Minimum Variance Spanning Tree/[BZOJ3754]Tree之最小方差树 题目大意: 给定一个\(n(n\le50)\)个点,\(m(m\le1000 ...

  2. 【枚举】【最小生成树】【kruscal】bzoj3754 Tree之最小方差树

    发现,若使方差最小,则使Σ(wi-平均数)2最小即可. 因为权值的范围很小,所以我们可以枚举这个平均数,每次把边权赋成(wi-平均数)2,做kruscal. 但是,我们怎么知道枚举出来的平均数是不是恰 ...

  3. bzoj3754 Tree之最小方差树 最小生成树+推性质

    题目传送门 https://lydsy.com/JudgeOnline/problem.php?id=3754 题解 感觉这个思路挺神仙的. 后悔没有好好观察题目的数据范围,一直把 \(n\) 和 \ ...

  4. 【bzoj3754】Tree之最小方差树 最小生成树

    题目描述 给出一张无向图,求它的一棵生成树,使得选出的所有边的方差最小.输出这个最小方差. 输入 第一行两个正整数N,M 接下来M行,每行三个正整数Ui,Vi,Ci N<=100,M<=2 ...

  5. bzoj 3754: Tree之最小方差树 模拟退火+随机三分

    题目大意: 求最小方差生成树.N<=100,M<=2000,Ci<=100 题解: 首先我们知道这么一个东西: 一些数和另一个数的差的平方之和的最小值在这个数是这些数的平均值时取得 ...

  6. BZOJ 3754 Tree之最小方差树 MST

    Description Wayne 在玩儿一个很有趣的游戏.在游戏中,Wayne 建造了N 个城市,现在他想在这些城市间修一些公路,当然并不是任意两个城市间都能修,为了道路系统的美观,一共只有M 对城 ...

  7. 【BZOJ 3754】Tree之最小方差树

    http://www.lydsy.com/JudgeOnline/problem.php?id=3754 核心思想:暴力枚举所有可能的平均数,对每个平均数排序后Kruskal. 正确的答案一定是最小的 ...

  8. 【BZOJ 3754】: Tree之最小方差树

    题目链接: TP 题解: 都是骗子233,我还以为是什么神奇的算法. 由于边权的范围很小,最小生成树和最大生成树之间的总和差不会太大,所以可以枚举边权和,再直接根据方差建最小生成树,每次更新答案即可. ...

  9. BZOJ 3754 Tree之最小方差树

    枚举平均数. mdzz编译器. #include<iostream> #include<cstdio> #include<cstring> #include< ...

随机推荐

  1. 转载:gulp文件

    这是我的文件目录结构图  下面是我gulpfile.js的配置 'use strict' var gulp=require('gulp'); var gutil=require('gulp-util' ...

  2. Android实现双击事件的两种方式

    Work around的方法是先监听onTouch事件来监听连续点击次数,每次点击都布置一个间隔时间的延时任务,延时任务执行时判断间隔内是否还有点击,如果没有则发布点击次数,重置计数. 实现代码如下: ...

  3. 一些有趣的Javascript技巧

    整理一些刷题时学会的小技巧…… 目录: 即大于0又小于0的变量 String.split() 与 正则表达式 缓存的几种方法 初始化一个数组 即大于0又小于0的变量 问题: 设计一个变量val,使得以 ...

  4. 关于VPN的一些问题

    在今在外出差,必须得连上公司的数据库,那就得使用VPN了,设置起来还算比较简单(我是win10), 简单介绍一下: 打开设置或者直接点击右下角的

  5. thinkPHP get

    大家都知道{Think.get.name}是输出get的值但是链接是输不出来的所以我现在先告诉大家一个简单的get值获取,直接在需要get值的链接里写$_GET['name'];就可以使get值附值给 ...

  6. IE8下导入EXCEL数据传到客户端以附件下载

    IE8下导入EXCEL数据传到客户端以附件下载方式出现,而不显示数据,解决方法:以text/html格式返回. HttpResponseMessage message = new HttpRespon ...

  7. python的异常处理

    在所有的程序中,都会遇到异常,有些异常是代码编写的时候产生的,在前期过程中可能会直接导致程序无法运行.这一类的异常,在编写代码的时候,程序可以直接排查修改.但有些异常,是在程序运行过程中产生的,可能是 ...

  8. PHP预定义接口之 ArrayAccess

    最近这段时间回家过年了,博客也没有更新,感觉少学习了好多东西,也错失了好多的学习机会,就像大家在春节抢红包时常说的一句话:一不留神错过了好几亿.废话少说,这篇博客给大家说说关于PHP预定义接口中常用到 ...

  9. Python 修改电脑DNS

    Pc电脑一般连网都是动态DHCP获取局域的IP地址,而且DNS服务器为自动获取地址.要修改DNS就要打开本地网络-本地连接- 属性- TCP/IP 手动修改DNS. 其实Python也可以通过WMI接 ...

  10. java web系统中时间比sql server中的日期少2天的解决办法

    系统环境 jdk:1.7 数据库:sql server 2008 问题描述 升级1.7之后查询出来的日期就比数据库中的少2天,降回1.6版本的jdk就正常了. 问题原因及解决办法 国内网站有很多不靠谱 ...