• 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 edge &e) const {
    return w < e.w;
    }
    } E[maxn * maxn];
     
    struct P {
    int x, y;
    inline void Read() {
    scanf("%d%d", &x, &y);
    }
    } A[maxn];
     
    double dist(int x, int y) {
    return sqrt(sqr(A[x].x - A[y].x) + sqr(A[x].y - A[y].y));
    }
     
    int d[maxn], N, M, cnt = 0, fa[maxn];
     
    int find(int x) {
    return x == fa[x] ? x : fa[x] = find(fa[x]);
    }
     
    int main() {
    scanf("%d", &M);
    for(int i = 0; i < M; i++) scanf("%d", d + i);
    scanf("%d", &N);
    for(int i = 0; i < N; i++) A[i].Read();
    for(int i = 0; i < N; i++)
       for(int j = i + 1; j < N; j++)
       E[cnt++] = (edge){i, j, dist(i, j)}; 
    sort(E, E + cnt);
    for(int i = 0; i < N; i++) fa[i] = i;
    double MIN = 0;
    for(int i = 0; i < cnt; i++) {
    edge* e = E + i;
    int u = find(e->u), v = find(e->v);
    if(u != v) {
    fa[u] = v;
    MIN = max(MIN, e->w);
    }
    }
    int ans = 0;
    for(int i = 0; i < M; i++) if(d[i] >= MIN) ans++;
    printf("%d ", ans);
    return 0;
    }

    --------------------------------------------------------------------------------

    2429: [HAOI2006]聪明的猴子

    Time Limit: 10 Sec  Memory Limit: 128 MB
    Submit: 547  Solved: 376
    [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

    对于40%的数据,保证有2<=N <=100,1<=M<=100


    对于全部的数据,保证有2<=N <= 1000,1<=M=500


     


    Source

  • 相关阅读:
    学号20145220《信息安全系统设计基础》第10周学习总结
    补发周四的博客。对之前的知识复习了一遍,因为要闭卷考试。
    jsp中文乱码
    redis做成windows服务
    poi导出excel打开文件时部分内容有问题
    mysql删除数据表时:Cannot delete or update a parent row: a foreign key constraint fails
    Oracle使用foreach批量操作数据
    Oracle数据库clob类型转String类型
    MAVEN配置多个仓库
    idea中maven项目明明有jar包还是爆红
  • 原文地址:https://www.cnblogs.com/JSZX11556/p/4779663.html
Copyright © 2020-2023  润新知