[HAOI2006] 聪明的猴子 - Kruskal

求给定的一组数中,不小于点集生成树中最长边距的有多少个。

Solution

裸题。

#include <bits/stdc++.h>
using namespace std;
#define int long long
const int N = 2005;
struct edge {
    int u,v;
    double w;
    bool operator < (const edge &b) {
        return w<b.w;
    }
} e[N*N];

int n,m,x[N],y[N],fa[N],a[N];
int find(int p) {
    return fa[p]==p?p:fa[p]=find(fa[p]);
}
void merge(int p,int q) {
    p=find(p);
    q=find(q);
    if(p-q) fa[p]=q;
}

signed main() {
    cin>>n;
    for(int i=1;i<=n;i++) cin>>a[i];
    cin>>m;
    for(int i=1;i<=m;i++) cin>>x[i]>>y[i];
    int ind=0;
    for(int i=1;i<=m;i++) {
        for(int j=1;j<i;j++) {
            e[++ind]=(edge){i,j,sqrt((x[i]-x[j])*(x[i]-x[j])+
                        (y[i]-y[j])*(y[i]-y[j]))};
        }
    }
    sort(e+1,e+ind+1);
    double tmp = 0;
    for(int i=1;i<=m;i++) fa[i]=i;
    for(int i=1;i<=ind;i++) {
        if(find(e[i].u)!=find(e[i].v)) {
            merge(e[i].u,e[i].v);
            tmp=max(tmp,e[i].w);
        }
    }
    int ans=0;
    for(int i=1;i<=n;i++) if(a[i]>=tmp) ++ans;
    cout<<ans;
}

原文地址:https://www.cnblogs.com/mollnn/p/12384927.html

时间: 2024-08-05 15:11:29

[HAOI2006] 聪明的猴子 - Kruskal的相关文章

BZOJ2429[HAOI2006]聪明的猴子[最小生成树 kruskal]

2429: [HAOI2006]聪明的猴子 Time Limit: 10 Sec  Memory Limit: 128 MBSubmit: 896  Solved: 575[Submit][Status][Discuss] Description 在一个热带雨林中生存着一群猴子,它们以树上的果子为生.昨天下了一场大雨,现在雨过天晴,但整个雨林的地表还是被大水淹没着,部分植物的树冠露在水面上.猴子不会游泳,但跳跃能力比较强,它们仍然可以在露出水面的不同树冠上来回穿梭,以找到喜欢吃的果实. 现在,在

BZOJ 2429: [HAOI2006]聪明的猴子( MST )

水题, 求MST即可. -------------------------------------------------------------------------------- #include<bits/stdc++.h> using namespace std; #define sqr(x) ((x) * (x)) const int maxn = 1009; struct edge { int u, v; double w; bool operator < (const e

2429: [HAOI2006]聪明的猴子

2429: [HAOI2006]聪明的猴子 Time Limit: 10 Sec  Memory Limit: 128 MBSubmit: 448  Solved: 309[Submit][Status][Discuss] Description 在一个热带雨林中生存着一群猴子,它们以树上的果子为生.昨天下了一场大雨,现在雨过天晴,但整个雨林的地表还是被大水淹没着,部分植物的树冠露在水面上.猴子不会游泳,但跳跃能力比较强,它们仍然可以在露出水面的不同树冠上来回穿梭,以找到喜欢吃的果实. 现在,在

cogs 1310. [HAOI2006]聪明的猴子

1310. [HAOI2006]聪明的猴子 ★   输入文件:monkey.in   输出文件:monkey.out   简单对比时间限制:1 s   内存限制:128 MB [题目描述] 在一个热带雨林中生存着一群猴子,它们以树上的果子为生.昨天下了一场大雨,现在雨过天晴,但整个雨林的地表还是被大水淹没着, 猴子不会游泳,但跳跃能力比较强,它们仍然可以在露出水面的部分植物的树冠上来回穿梭,以找到喜欢吃的果实. 现在,在这个地区露出水面的有N棵树,假设每棵树本身的直径都很小,可以忽略不计.我们在

BZOJ 2429: [HAOI2006]聪明的猴子

Time Limit: 10 Sec  Memory Limit: 128 MBSubmit: 1502  Solved: 855[Submit][Status][Discuss] Description 在一个热带雨林中生存着一群猴子,它们以树上的果子为生.昨天下了一场大雨,现在雨过天晴,但整个雨林的地 表还是被大水淹没着,部分植物的树冠露在水面上.猴子不会游泳,但跳跃能力比较强,它们仍然可以在露出水面 的不同树冠上来回穿梭,以找到喜欢吃的果实.现在,在这个地区露出水面的有N棵树,假设每棵树本

COGS——T1310. [HAOI2006]聪明的猴子

http://cogs.pro/cogs/problem/problem.php?pid=1310 ★   输入文件:monkey.in   输出文件:monkey.out   简单对比时间限制:1 s   内存限制:128 MB [题目描述] 在一个热带雨林中生存着一群猴子,它们以树上的果子为生.昨天下了一场大雨,现在雨过天晴,但整个雨林的地表还是被大水淹没着, 猴子不会游泳,但跳跃能力比较强,它们仍然可以在露出水面的部分植物的树冠上来回穿梭,以找到喜欢吃的果实. 现在,在这个地区露出水面的有

bzoj2429[HAOI2006]聪明的猴子

题意: 平面上N个点(任意两个点的坐标都不相同).现已知M个猴子的最大跳跃距离,还知道N个点坐标,统计有多少个猴子可以在所有点上觅食. 题解: 题目中隐含了一个条件,就是猴子可以从任意点出发.因此我们可以确定一个点,求出它到所有点的最小距离的最大值,然后判断每只猴子的跳跃距离是否大于等于这个最大值.这正是MST问题,用Kruscal排序后选的第n-1条边的长度就是根到所有点的最小距离的最大值. 代码: 1 #include <cstdio> 2 #include <algorithm&g

[HAOI2006]聪明的猴子

/* 找出能连通所有点的一棵树 是的最大的边最小 很显然就是最小生成树. 堆优化prim. */ #include<iostream> #include<cstring> #include<cstdio> #include<cmath> #include<queue> #define maxn 1010 #define inf 999999999 using namespace std; int n,m,num,head[maxn],ans,to

利用Kruskal算法求最小生成树解决聪明的猴子问题 -- 数据结构

题目:聪明的猴子 链接:https://ac.nowcoder.com/acm/problem/19964 在一个热带雨林中生存着一群猴子,它们以树上的果子为生.昨天下了一场大雨,现在雨过天晴,但整个雨林的地 表还是被大水淹没着,部分植物的树冠露在水面上.猴子不会游泳,但跳跃能力比较强,它们仍然可以在露出水面 的不同树冠上来回穿梭,以找到喜欢吃的果实.现在,在这个地区露出水面的有N棵树,假设每棵树本身的直径都 很小,可以忽略不计.我们在这块区域上建立直角坐标系,则每一棵树的位置由其所对应的坐标表