bzoj3754: Tree之最小方差树
2016-01-14 10:09
369 查看
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
31 2 1
2 3 2
3 1 3
Sample Output
0.5000HINT
N<=100,M<=2000,Ci<=100题解:
Orz thy http://blog.csdn.net/thy_asdf/article/details/50514711
code:
#include<cstdio> #include<iostream> #include<cmath> #include<cstring> #include<algorithm> #define maxn 105 #define maxm 2005 #define sqr(x) ((x)*(x)) using namespace std; char ch; bool ok; void read(int &x){ for (ok=0,ch=getchar();!isdigit(ch);ch=getchar()) if (ch=='-') ok=1; for (x=0;isdigit(ch);x=x*10+ch-'0',ch=getchar()); if (ok) x=-x; } struct Edge{ int u,v,c; double w; }edge[maxm]; bool cmp(Edge a,Edge b){return a.w<b.w;} int n,m,tot; double w[maxm*maxm],ans=1E30; int fa[maxn]; int find(int x){return x==fa[x]?fa[x]:fa[x]=find(fa[x]);} double kruskal(double mid){ for (int i=1;i<=n;i++) fa[i]=i; for (int i=1;i<=m;i++) edge[i].w=sqr(edge[i].c-mid); sort(edge+1,edge+m+1,cmp); double ans=0,ave=0; for (int i=1,cnt=0;i<=m&&cnt<n;i++) if (find(edge[i].u)!=find(edge[i].v)) fa[find(edge[i].u)]=find(edge[i].v),ans+=sqr(edge[i].c),ave+=edge[i].c; ans/=n-1,ave/=n-1,ans=ans-sqr(ave); return ans; } int main(){ read(n),read(m); for (int i=1;i<=m;i++) read(edge[i].u),read(edge[i].v),read(edge[i].c); for (int i=1;i<=m;i++) for (int j=1;j<=m;j++) w[++tot]=(edge[i].c+edge[j].c)/2.0; sort(w+1,w+tot+1),tot=unique(w+1,w+tot+1)-w-1; for (int i=2;i<=tot;i++) ans=min(ans,kruskal((w[i-1]+w[i])/2.0)); printf("%.4lf\n",sqrt(ans)); return 0; }
相关文章推荐
- Linux 下安装 jdk-7u75-linux-x64.gz,jdk1.7.0_75,jdk1.7步骤:
- C# HttpHelper,帮助类,真正的Httprequest请求时无视编码,无视证书,无视Cookie,网页抓取
- 初始化Outlook
- OpenCV3.0+VS2013配置教程
- 百度地图开发(三)之地图控制 + 定位
- 最简明扼要的 Systemd 教程,只需十分钟
- ARM中跳转指令BL/BLX偏移值计算规则
- 网络编程Socket入门篇
- Listview的几种特殊的属性
- Python学习笔记——实例方法和静态方法
- Xcode测试
- UGUI中的InputField下的placeholder的作用?
- 关于js事件冒泡和事件捕获
- c#范型List的Sort方法详解
- JUnit简单教程
- java 反射的一个例子
- Java SE 学习笔记 chapter3
- GUID
- App自动更新之通知栏下载(转)
- 继承抽象类运行其方法出现null的异常