洛谷——P2504 [HAOI2006]聪明的猴子
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包括一个整数,表示可以在这个地区的所有树冠上觅食的猴子数。
输入输出样例
说明
【数据规模】
对于40%的数据,保证有2<=N <=100,1<=M<=100
对于全部的数据,保证有2<=N <= 1000,1<=M=500
感谢@charlie003 修正数据
日常水题:
最小生成树模板
题目大意:给你n棵树的坐标,m个猴子的最大跳跃距离,问你多少个猴子可以跳跃到任意一棵树上
思路:最小生成树求出最大的边,比较计数即可
Prim
#include<bits/stdc++.h> #define N 200005
#define ll long long
#define RE register
#define max(a,b) (a>b?a:b) using namespace std; void read(int &x){
int flg=;x=;RE char ch=getchar();
if(ch=='-') flg=-;
for(;ch>''||ch<'';) ch=getchar();
for(;ch<=''&&ch>='';ch=getchar()) x=x*+ch-'';
x*=flg;
}
double dist(int x1,int x2,int y1,int y2)
{
return sqrt((x1-x2)*(x1-x2)+(y1-y2)*(y1-y2));
}
double d[][],minn[N],maxn;
int m,n,w[N],x[N],y[N],ans;
bool vis[N];
void Print(){
for(int i=;i<=n;i++){
for(int j=;j<=m;j++){
printf("%f ",d[i][j]);
}printf("\n");
}
}
int main()
{
read(m);
for(int i=;i<=m;i++) read(w[i]);
read(n);
for(int i=;i<=n;i++) cin>>x[i]>>y[i];
memset(d,0x7f,sizeof(d));
for(int i=;i<=n;i++){
for(int j=;j<=n;j++){
d[i][j]=d[j][i]=dist(x[i],x[j],y[i],y[j]);
}
}memset(minn,0x7f,sizeof(minn));minn[]=;
//Print();
for(int i=;i<=n;i++){
int k=;
for(int j=;j<=n;j++)
if(!vis[j]&&(minn[j]<minn[k]))
k=j;
vis[k]=;
for(int j=;j<=n;j++)
if(!vis[j]&&d[k][j]<minn[j])
minn[j]=d[k][j];
}for(int i=;i<=n;i++)
maxn=max(maxn,minn[i]);
for(int i=;i<=m;i++)
if(w[i]>=maxn) ++ans;
printf("%d",ans);
return ;
}
Kruskal
#include<bits/stdc++.h> #define N 2000050
#define ll long long
#define RE register
#define max(a,b) (a>b?a:b) using namespace std; void read(int &x){
int flg=;x=;RE char ch=getchar();
if(ch=='-') flg=-;
for(;ch>''||ch<'';) ch=getchar();
for(;ch<=''&&ch>='';ch=getchar()) x=x*+ch-'';
x*=flg;
}
double dist(int x1,int x2,int y1,int y2)
{
return sqrt((x1-x2)*(x1-x2)+(y1-y2)*(y1-y2));
}
struct node{
int u,v;
double d;
}e[N];
double maxn;
int m,n,w[N],x[N],y[N],ans,tot,fa[N],item;
bool vis[N];
int find(int u){
return fa[u]=(fa[u]==u)?u:find(fa[u]);
}
bool cmp(node A,node B){
return A.d<B.d;
}
int main()
{
read(m);
for(int i=;i<=m;i++) read(w[i]);
read(n);
for(int i=;i<=n;i++) cin>>x[i]>>y[i];
for(int i=;i<=n;i++){
for(int j=;j<=n;j++){
e[++tot].u=i,e[tot].v=j;
e[tot].d=dist(x[i],x[j],y[i],y[j]);
}
}
for(int i=;i<=n;i++) fa[i]=i;
sort(e+,e++tot,cmp);
for(int i=;i<=tot;i++){
int fx=find(e[i].u),fy=find(e[i].v);
if(fx==fy) continue;
maxn=max(maxn,e[i].d);
fa[fx]=fy;++item;
if(item==n-) break;
}
for(int i=;i<=m;i++)
if(w[i]>=maxn) ++ans;
printf("%d",ans);
return ;
}
洛谷——P2504 [HAOI2006]聪明的猴子的更多相关文章
- 洛谷 P2504 [HAOI2006]聪明的猴子
洛谷 P2504 [HAOI2006]聪明的猴子 题目描述 在一个热带雨林中生存着一群猴子,它们以树上的果子为生.昨天下了一场大雨,现在雨过天晴,但整个雨林的地表还是被大水淹没着,部分植物的树冠露在水 ...
- 洛谷—— P2504 [HAOI2006]聪明的猴子
P2504 [HAOI2006]聪明的猴子 题目描述 在一个热带雨林中生存着一群猴子,它们以树上的果子为生.昨天下了一场大雨,现在雨过天晴,但整个雨林的地表还是被大水淹没着,部分植物的树冠露在水面上. ...
- 洛谷P2504 [HAOI2006]聪明的猴子题解
题目 记录悲伤 已知猴子的数量以及猴子跳的最大距离 已知数的数量以及树的坐标 最小生成树 每两棵树之间的距离需要枚举来计算 算出最大值之后再与n只猴子进行比较记录答案 需要注意 在使用最小生成树的时候 ...
- 洛谷P2504 [HAOI2006]聪明的猴子
#include<bits/stdc++.h> using namespace std; ; ; int n,m,k,ans; double Max; int monkey[maxn]; ...
- 【洛谷P2504】聪明的猴子 最小瓶颈树
题目大意:给定一张 N 个顶点的完全图,边有边权,求该完全图的一棵最小瓶颈树. 最小瓶颈树:一棵最大边权值在同一张图的所有生成树中最小,即:最大边权值最小的生成树,其值为该树的最大边权的权值. 引理1 ...
- P2504 [HAOI2006]聪明的猴子
思路 最小生成树中最大的边,边权最小 所以这题就变成最小生成树的板子了,跳跃距离大于最大边权的猴子就是可行的 代码 #include <cstdio> #include <algor ...
- BZOJ2429[HAOI2006]聪明的猴子[最小生成树 kruskal]
2429: [HAOI2006]聪明的猴子 Time Limit: 10 Sec Memory Limit: 128 MBSubmit: 896 Solved: 575[Submit][Statu ...
- 最小生成树 2429: [HAOI2006]聪明的猴子
BZOJ 2429: [HAOI2006]聪明的猴子 Time Limit: 10 Sec Memory Limit: 128 MBSubmit: 877 Solved: 566[Submit][ ...
- 最小生成树——[HAOI2006]聪明的猴子
题目:[HAOI2006]聪明的猴子 描述: [题目描述] 在一个热带雨林中生存着一群猴子,它们以树上的果子为生.昨天下了一场大雨,现在雨过天晴,但整个雨林的地表还是被大水淹没着, 猴子不会游泳,但跳 ...
随机推荐
- 逆向工程之App脱壳
http://www.cnblogs.com/ludashi/p/5725743.html iOS逆向工程之App脱壳 本篇博客以微信为例,给微信脱壳."砸壳"在iOS逆向工程中是 ...
- 【剑指offer】斐波那契序列与跳台阶
转载请注明出处:http://blog.csdn.net/ns_code/article/details/25337983 剑指offer上的第9题,简单题,在九度OJ上測试通过. 主要注意下面几点: ...
- UVALive 4212 - Candy
Little Charlie is a nice boy addicted to candies. He is even a subscriber to All Candies Magazine an ...
- 关于OpenFileDialog的使用 2(转)
关于OpenFileDialog的使用 (2010-03-25 12:51:33) 标签: 杂谈 分类: WinForm 1. OpenFileDialog控件有以下基本属性 InitialDirec ...
- 解决openresty http客户端不支持https的问题
OpenResty默认没有提供Http客户端,需要使用第三方提供:当然我们可以通过ngx.location.capture 去方式实现,但它只能发送一个子请求. 第三方基本是以lua-resty-ht ...
- [JSOI 2010] 满汉全席
[题目链接] https://www.lydsy.com/JudgeOnline/problem.php?id=1823 [算法] 2-SAT [代码] #include<bits/stdc++ ...
- [linux环境配置]个人用持续更新ing~
alias ll='ls -la' export PATH=$PATH:~/Desktop/myscript alias gpush='git push origin HEAD:refs/for/ma ...
- JSP-Runoob:JSP 国际化
ylbtech-JSP-Runoob:JSP 国际化 1.返回顶部 1. JSP 国际化 在开始前,需要解释几个重要的概念: 国际化(i18n):表明一个页面根据访问者的语言或国家来呈现不同的翻译版本 ...
- ubuntu下设置共享目录
在使用VirtualBox和相关的客户机系统比如XPMac等需要用到一些相关功能共享剪贴板等等这时候需要安装VirtualBox中的一个工具叫做Guest Additions中文叫法不一增强工具包功能 ...
- 基于spark和flink的电商数据分析项目
目录 业务需求 业务数据源 用户访问Session分析 Session聚合统计 Session分层抽样 Top10热门品类 Top10活跃Session 页面单跳转化率分析 各区域热门商品统计分析 广 ...