zoukankan      html  css  js  c++  java
  • BZOJ 2429 HAOI2006 聪明的猴子

    2429: [HAOI2006]聪明的猴子

    Time Limit: 10 Sec  Memory Limit: 128 MB
    Submit: 1601  Solved: 919
    [Submit][Status][Discuss]

    Description

    在一个热带雨林中生存着一群猴子,它们以树上的果子为生。昨天下了一场大雨,现在雨过天晴,但整个雨林的地
    表还是被大水淹没着,部分植物的树冠露在水面上。猴子不会游泳,但跳跃能力比较强,它们仍然可以在露出水面
    的不同树冠上来回穿梭,以找到喜欢吃的果实。现在,在这个地区露出水面的有N棵树,假设每棵树本身的直径都
    很小,可以忽略不计。我们在这块区域上建立直角坐标系,则每一棵树的位置由其所对应的坐标表示(任意两棵树
    的坐标都不相同)。在这个地区住着的猴子有M个,下雨时,它们都躲到了茂密高大的树冠中,没有被大水冲走。由
    于各个猴子的年龄不同、身体素质不同,它们跳跃的能力不同。有的猴子跳跃的距离比较远(当然也可以跳到较近
    的树上),而有些猴子跳跃的距离就比较近。这些猴子非常聪明,它们通过目测就可以准确地判断出自己能否跳到
    对面的树上。【问题】 现已知猴子的数量及每一个猴子的最大跳跃距离,还知道露出水面的每一棵树的坐标,你
    的任务是统计有多少个猴子可以在这个地区露出水面的所有树冠上觅食。

    Input

    第1行为一个整数,表示猴子的个数M(2<=M<=500);
    第2行为M个整数,依次表示猴子的最大跳跃距离(每个整数值在1--1000之间);
    第3行为一个整数表示树的总棵数N(2<=N<=1000);
    第4行至第N+3行为N棵树的坐标(横纵坐标均为整数,范围为:-1000--1000)。
    (同一行的整数间用空格分开)

    Output

    包括一个整数,表示可以在这个地区的所有树冠上觅食的猴子数

    Sample Input

    4
    1 2 3 4
    6
    0 0
    1 0
    1 2
    -1 -1
    -2 0
    2 2

    Sample Output

    3

    HINT

    2<=N <= 1000,1<=M=500 

    Source

    Day2

    做出最小生成树后,判断有多少个猴子的跳跃能力大于等于最小生成树上的最大边即可

    #include <bits/stdc++.h>
    #define ll long long
    #define inf 10000000
    #define eps 1e-7
    using namespace std;
    inline int read(){
        int x=0;int f=1;char ch=getchar();
        while(!isdigit(ch)) {if(ch=='-') f=-1;ch=getchar();}
        while(isdigit(ch)) {x=x*10+ch-'0';ch=getchar();}
        return x*f;
    }
    const int MAXN=1e6+10;
    struct node{
        int x,y,v;
    }e[MAXN];
    int f[MAXN],cnt,x[MAXN],y[MAXN],a[MAXN];
    inline bool mycmp(node n,node m){
        return n.v<m.v;
    }
    inline int find(int x){
        return x==f[x]?x:f[x]=find(f[x]);
    }
    int main(){
        int n=read();
        for(int i=1;i<=n;i++){
            a[i]=read();
        }
        int m=read();
        for(int i=1;i<=m;i++){
            x[i]=read();y[i]=read();f[i]=i;
        }
        for(int i=1;i<=m;i++){
            for(int j=i+1;j<=m;j++){
                e[++cnt].x=i;e[cnt].y=j;e[cnt].v=(x[i]-x[j])*(x[i]-x[j])+(y[i]-y[j])*(y[i]-y[j]);
            }
        }
        sort(e+1,e+cnt+1,mycmp);
        int mx;
        for(int i=1;i<=cnt;i++){
            int fx=find(e[i].x);int fy=find(e[i].y);
            if(fx!=fy){
                mx=e[i].v;f[fx]=fy;
            }
        }
        int ans=0;
        for(int i=1;i<=n;i++){
            if(a[i]*a[i]>=mx) ans++;
        }
        cout<<ans<<endl;
        return 0;
    }
    

      

  • 相关阅读:
    Sql Server2012连接不上问题
    WinForm的App.config写法
    (原)centos 防火墙开放端口命令
    Linux下rsync的用法
    Centos7下部署minio
    arthas简单使用
    在Docker中运行MinIO单点模式
    中台是什么
    Kubernetes K8S之Ingress详解与示例
    Rancher2.x平台搭建与使用
  • 原文地址:https://www.cnblogs.com/something-for-nothing/p/8087745.html
Copyright © 2011-2022 走看看