P2504 [HAOI2006]聪明的猴子-题目详解
题目描述
在一个热带雨林中生存着一群猴子,它们以树上的果子为生。昨天下了一场大雨,现在雨过天晴,但整个雨林的地表还是被大水淹没着,部分植物的树冠露在水面上。猴子不会游泳,但跳跃能力比较强,它们仍然可以在露出水面的不同树冠上来回穿梭,以找到喜欢吃的果实。
现在,在这个地区露出水面的有N棵树,假设每棵树本身的直径都很小,可以忽略不计。我们在这块区域上建立直角坐标系,则每一棵树的位置由其所对应的坐标表示(任意两棵树的坐标都不相同)。
在这个地区住着的猴子有M个,下雨时,它们都躲到了茂密高大的树冠中,没有被大水冲走。由于各个猴子的年龄不同、身体素质不同,它们跳跃的能力不同。有的猴子跳跃的距离比较远(当然也可以跳到较近的树上),而有些猴子跳跃的距离就比较近。这些猴子非常聪明,它们通过目测就可以准确地判断出自己能否跳到对面的树上。
【问题】现已知猴子的数量及每一个猴子的最大跳跃距离,还知道露出水面的每一棵树的坐标,你的任务是统计有多少个猴子可以在这个地区露出水面的所有树冠上觅食。
输入格式
输入文件monkey.in包括:
第1行为一个整数,表示猴子的个数M(2<=M<=500);
第2行为M个整数,依次表示猴子的最大跳跃距离(每个整数值在1--1000之间);
第3行为一个整数表示树的总棵数N(2<=N<=1000);
第4行至第N+3行为N棵树的坐标(横纵坐标均为整数,范围为:-1000--1000)。
(同一行的整数间用空格分开)
输出格式
输出文件monkey.out包括一个整数,表示可以在这个地区的所有树冠上觅食的猴子数。
输入输出样例
输入 #1复制
41 2 3 4 6 0 0 1 0 1 2 -1 -1 -2 0 2 2
输出 #1复制
3
说明/提示
【数据规模】
对于40%的数据,保证有2<=N <=100,1<=M<=100
对于全部的数据,保证有2<=N <= 1000,1<=M=500
提示:这道题可以理解为最小生成树的做法来连通全图,然后用全图中两点最长的距离和每个猴子跳跃距离去比较,最终得出答案。
代码实现
#include<cmath>
#include<cstdio>
#include<iostream>
#include<cstring>
#include<algorithm>
using namespace std;
int hz[100005];
int ax[100005],ay[100005];
struct edge{int u,v,w,next;bool operator <(const edge &a)const{return w<a.w;}
}e[1000005];
int f[100005];
int vis[100005];
int js(int x,int y){return 1ll*(ax[x]-ax[y])*(ax[x]-ax[y])+1ll*(ay[x]-ay[y])*(ay[x]-ay[y]);
}
int getf(int x){return x==f[x]?x:f[x]=getf(f[x]);
}
int ecnt=0;
void add(int u,int v ,int w){e[++ecnt].u=u;e[ecnt].v=v;e[ecnt].w=w;
}
int n,m;
int main(){cin>>m;for(int i=1;i<=m;i++){cin>>hz[i];}cin>>n;for(int i=1;i<=n;i++){cin>>ax[i]>>ay[i];}for(int i=1;i<=n;i++){f[i]=i;}for(int i=1;i<n;i++){for(int j=i+1;j<=n;j++){add(i,j,js(i,j));}}int cnt=0;double ans=-1;sort(e+1,e+1+ecnt);for(int i=1;i<=ecnt;i++){int u=getf(e[i].u);int v=getf(e[i].v);if(u!=v){cnt++;ans=max(ans,sqrt(e[i].w));//在这里稍加改动,记录一下最长距离f[u]=v;if(cnt==n-1){break;}}}int as=0;for(int i=1;i<=m;i++){if(ans<=hz[i]){as++;}}cout<<as;
}
克鲁斯卡尔算法如有不懂可以看这里克鲁斯卡尔算法详解
都看到这了,关注一下吧^^
P2504 [HAOI2006]聪明的猴子-题目详解相关推荐
- P2504 [HAOI2006]聪明的猴子 题解
P2504 [HAOI2006]聪明的猴子 题解 题目 链接 字面描述 题目描述 输入格式 输出格式 样例 #1 样例输入 #1 样例输出 #1 提示 思路 代码实现 题目 链接 https://ww ...
- 洛谷p2504 HAOI2006 聪明的猴子
[题目描述] 在一个热带雨林中生存着一群猴子,它们以树上的果子为生.昨天下了一场大雨,现在雨过天晴,但整个雨林的地表还是被大水淹没着, 猴子不会游泳,但跳跃能力比较强,它们仍然可以在露出水面的部分植物 ...
- BZOJ 2429: [HAOI2006]聪明的猴子【最小生成树】
2429: [HAOI2006]聪明的猴子 Time Limit: 10 Sec Memory Limit: 128 MB Description 在一个热带雨林中生存着一群猴子,它们以树上的果子为生 ...
- bzoj 2429: [HAOI2006]聪明的猴子(最小生成树)
2429: [HAOI2006]聪明的猴子 Time Limit: 10 Sec Memory Limit: 128 MB Submit: 1570 Solved: 902 [Submit][St ...
- 计算机组成原理课设题目详解
计算机组成原理课设题目详解 一.实验一 1.实验名称: 验证74LS181运算和逻辑功能 2.实验目的: (1) 掌握算术逻辑单元(ALU)的工作原理: (2) 熟悉简单运算器的数据传送通路: (3) ...
- 蓝桥杯java B组历年省赛真题汇总及题目详解
蓝桥杯java B组历年省赛真题汇总及题目详解 2019年第十届蓝桥杯省赛真题详解 2018年第九届蓝桥杯省赛真题详解 2017年第八届蓝桥杯省赛真题详解 2016年第七届蓝桥杯省赛真题详解 2015 ...
- 蓝桥杯历年省赛JAVA-B组真题汇总及题目详解
蓝桥杯 历年省赛JAVA-B组真题汇总及题目详解 题目大致介绍: 第一题到第三题以及第六题是结果填空,方法不限得到最后结果就行. 第四题和第五题是代码填空题,主要考察算法基本功和编程基本功. 第八题到 ...
- 如何快速掌握MYSQL?附牛客网精选的50道SQL题目详解【入门推荐】
大家早上好,本人姓吴,如果觉得文章写得还行的话也可以叫我吴老师.欢迎大家跟我一起走进数据分析的世界,一起学习! 感兴趣的朋友可以关注我的数据分析专栏,里面有许多优质的文章跟大家分享哦. 另外也欢迎大家 ...
- Openjudge 题目详解 1.1
Openjudge 题目详解 1.1编程基础之输入输出 [Hello, World!](http://noi.openjudge.cn/ch0101/01/) 描述 输入 输出 样例输入 样例输出 提 ...
- c语言中循环次数的问题,【C语言】循环题目详解
老九学堂传送门 C语言有3种循环:for.while.do while: 接下来,老九君带着大家来详细的解析一下关于循环的题目,让你更加清楚和熟练的掌握循环. 三大循环 1.whlie循环: /* w ...
最新文章
- FPGA之道(20)FPGA设计的上板调试与项目总结
- 计算机网络 实验六 静态路由配置,《计算机网络》实六 静态路由配置 实验报告.doc...
- 【Python 爬虫】 2、HTTP基本原理
- com.xxl.rpc.util.XxlRpcException: java.lang.IllegalStateException: failed to create a child event lo
- 《构架之美》阅读笔记三
- node服务:日志、配置、路由与控制器
- EF Core中避免贫血模型的三种行之有效的方法(翻译)
- 分享一下淘宝iData技术嘉年华的几点感触
- 一个完全摆脱findViewById的自动绑定库
- 【ES】ES 拼音 Pinyin 分词器
- 罗永浩关联直播交易案遭“问停”;中国量子计算原型机“九章”问世;pip 20.3 发布 | 极客头条...
- mac / Ubuntu 终端下添加tree命令显示文件目录结构
- dell笔记本电脑驱动_驱动到底是什么?别再用精灵管家无脑装驱动了
- ENVI5.1LC08大气校正前期步骤
- 爬虫入门实践:天气信息
- 一张纸厚度是多少毫米_一张A4纸的厚度是多少mm?
- 安卓/苹果手机直播声卡方案,实现一边直播一边充电功能
- 多智能体强化学习:合作关系设定下的多智能体强化学习
- 提高网站权重,快速增加百度收录量
- 奖励补贴有点多!武汉市大健康和生物技术产业发展奖励措施解读