[bzoj3754][GDOI2014模拟]Tree

news/2024/5/18 5:20:50 标签: bzoj3754, GDOI2014模拟, tree, mst, 枚举

Description

最小标准差生成树。。。。
n<=100,m<=2000,边权<=100

Solution

其实我比赛时想的是可以的,不过不用二分,而用枚举
没错,枚举平均数。
不过,可能的数太多了,得另想办法。
我们把排好序的数按顺序排列,对于相邻的两个数a和b,和他们的平均数ave,区间[a,ave]中的任意一个数为平均数所形成的最小生成树都是一样的。
同理[ave,b]。
所以我们可以以0.25为间隔来枚举,这样就可以了.

Code

#include<cmath>
#include<cstdio>
#include<cstring>
#include<algorithm>
#define fo(i,a,b) for(int i=a;i<=b;i++)
#define sqr(x) (x)*(x)
#define N 105
#define M 2005
using namespace std;
typedef double db;
const db eps=0.25;
struct note{int x,y,z;}a[M];
db ave,cnt,ans,all;
int n,m,tot,up,f[N];
bool bz[M];
bool cmp(note x,note y) {return sqr(x.z-ave)<sqr(y.z-ave);}
int get(int x) {return f[x]?f[x]=get(f[x]):x;}
int main() {
    scanf("%d%d",&n,&m);ans=0x7fffffff;
    fo(i,1,m) scanf("%d%d%d",&a[i].x,&a[i].y,&a[i].z),
    up=max(up,a[i].z);
    for(;ave<=up;ave+=eps) {
        sort(a+1,a+m+1,cmp);memset(f,0,sizeof(f));
        memset(bz,0,sizeof(bz));tot=all=0;
        fo(i,1,m) {
            int x=get(a[i].x),y=get(a[i].y);
            if (x!=y) tot++,all+=a[i].z,bz[i]=1,f[y]=x;
            if (tot==n-1) break;
        }   
        all/=n-1;cnt=0;
        fo(i,1,m) if (bz[i]) cnt+=sqr(a[i].z-all);
        ans=min(ans,sqrt(cnt/(n-1)));
    }
    printf("%.4lf",ans);
}
treeSkill">

http://www.niftyadmin.cn/n/942539.html

相关文章

BZOJ 1724 [Usaco2006 Nov]Fence Repair 切割木板 贪心+堆

Description Farmer John想修理牧场栅栏的某些小段。为此&#xff0c;他需要N(1<N<20,000)块特定长度的木板&#xff0c;第i块木板的长度为Li(1<Li<50,000)。然后&#xff0c;FJ去买了一块很长的木板&#xff0c;它的长度正好等于所有需要的木板的长度和。接下来的…

【GDOI2014模拟】网格

Description 求从&#xff08;0,0&#xff09;点走到&#xff08;n,m&#xff09;点不越过直线yx的方案数。 n,m<5000 Solution 首先&#xff0c;这是一个经典问题&#xff0c;相信大家都会做。 正难则反&#xff0c;我们用总数减去不合法的方案数。 总数很明显是Cmmn…

bzoj 4720: [Noip2016]换教室

Description 对于刚上大学的牛牛来说,他面临的第一个问题是如何根据实际情况申请合适的课程。在可以选择的课程中,有2n节课程安排在n个时间段上。在第i(1≤i≤n)个时间段上,两节内容相同的课程同时在不同的地点进行,其中,牛牛预先被安排在教室ci上课,而另一节课程在教室di进行。…

BZOJ 1642 [Usaco2007 Nov]Milking Time 挤奶时间 排序+DP

Description 贝茜是一只非常努力工作的奶牛&#xff0c;她总是专注于提高自己的产量。为了产更多的奶&#xff0c;她预计好了接下来的N (1 ≤ N ≤ 1,000,000)个小时&#xff0c;标记为0..N-1。 Farmer John 计划好了 M (1 ≤ M ≤ 1,000) 个可以挤奶的时间段。每个时间段有一个…

【GDOI2014模拟】服务器

Description 我们可以从n个数中选择一些&#xff0c;选择第i个数的代价为Ci&#xff0c;且必须选择n。对于每个没有被选择的数i&#xff0c;若它右边离它最近的一个被选择的数是j&#xff0c;则代价为j-i。 求最小代价。 n<10^6 Solution N^2Dp还是很显然的。 设Fi表示…

BZOJ 1050 [HAOI2006]旅行comf Kruskal

Description 给你一个无向图&#xff0c;N(N<500)个顶点, M(M<5000)条边&#xff0c;每条边有一个权值Vi(Vi<30000)。给你两个顶点S和T&#xff0c;求一条路径&#xff0c;使得路径上最大边和最小边的比值最小。如果S和T之间没有路径&#xff0c;输出”IMPOSSIBLE”&a…

[bzoj3211]花神游历各国

Description 写一个数据结构兹瓷区间求和和区间开方。 n<10^5,m<2*10^5,ai<10^9 Solution 区间开平方&#xff1f;暴力开呗。 反正10^9也不需要开多少次&#xff0c;只不过常数大了点罢了。 用线段树维护区间和&#xff0c;还有区间标记&#xff0c;表示这个区间…

Google Kickstart 2017 Round A 题解

打得最惨的一场google线上比赛。 ABC三题&#xff0c;代码见最后 Problem A. Square Counting This contest is open for practice. You can try every problem as many times as you like, though we wont keep track of which problems you solve. Read the Quick-Start Gui…