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: 复制

4
1 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

感谢@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]聪明的猴子的更多相关文章

  1. 洛谷 P2504 [HAOI2006]聪明的猴子

    洛谷 P2504 [HAOI2006]聪明的猴子 题目描述 在一个热带雨林中生存着一群猴子,它们以树上的果子为生.昨天下了一场大雨,现在雨过天晴,但整个雨林的地表还是被大水淹没着,部分植物的树冠露在水 ...

  2. 洛谷—— P2504 [HAOI2006]聪明的猴子

    P2504 [HAOI2006]聪明的猴子 题目描述 在一个热带雨林中生存着一群猴子,它们以树上的果子为生.昨天下了一场大雨,现在雨过天晴,但整个雨林的地表还是被大水淹没着,部分植物的树冠露在水面上. ...

  3. 洛谷P2504 [HAOI2006]聪明的猴子题解

    题目 记录悲伤 已知猴子的数量以及猴子跳的最大距离 已知数的数量以及树的坐标 最小生成树 每两棵树之间的距离需要枚举来计算 算出最大值之后再与n只猴子进行比较记录答案 需要注意 在使用最小生成树的时候 ...

  4. 洛谷P2504 [HAOI2006]聪明的猴子

    #include<bits/stdc++.h> using namespace std; ; ; int n,m,k,ans; double Max; int monkey[maxn]; ...

  5. 【洛谷P2504】聪明的猴子 最小瓶颈树

    题目大意:给定一张 N 个顶点的完全图,边有边权,求该完全图的一棵最小瓶颈树. 最小瓶颈树:一棵最大边权值在同一张图的所有生成树中最小,即:最大边权值最小的生成树,其值为该树的最大边权的权值. 引理1 ...

  6. P2504 [HAOI2006]聪明的猴子

    思路 最小生成树中最大的边,边权最小 所以这题就变成最小生成树的板子了,跳跃距离大于最大边权的猴子就是可行的 代码 #include <cstdio> #include <algor ...

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

    2429: [HAOI2006]聪明的猴子 Time Limit: 10 Sec  Memory Limit: 128 MBSubmit: 896  Solved: 575[Submit][Statu ...

  8. 最小生成树 2429: [HAOI2006]聪明的猴子

    BZOJ 2429: [HAOI2006]聪明的猴子 Time Limit: 10 Sec  Memory Limit: 128 MBSubmit: 877  Solved: 566[Submit][ ...

  9. 最小生成树——[HAOI2006]聪明的猴子

    题目:[HAOI2006]聪明的猴子 描述: [题目描述] 在一个热带雨林中生存着一群猴子,它们以树上的果子为生.昨天下了一场大雨,现在雨过天晴,但整个雨林的地表还是被大水淹没着, 猴子不会游泳,但跳 ...

随机推荐

  1. window+nginx+php-cgi的php-cgi线程/子进程问题

    见bbs http://bbs.csdn.net/topics/390803643/close 正常的配置情况下,window的php-cgi是不会出现多线程/子进程的,例如以下配置 fastcgi_ ...

  2. apt --fix-broken install

    1 自动修复安装出现broken的package 但是,如果还是失败的话,就需要手动进行干预了.

  3. [模板]平衡树splay

    气死我了,调了一个下午+两节课,各种大大小小的错误,各种调QAQ,最后总之是调出来了. 其实就是一个双旋操作,然后其他就是左儿子<当前节点<右儿子,剩下就是细节了. 题干: 题目描述 您需 ...

  4. bzoj1227

    离散化+树状数组+排列组合 很久以前就看到过这道题,现在依然不会做...看完题解发现思路很简单,就是有点难写 我们先将坐标离散化,x和y最大是w,然后我们就有了一个暴力做法, 枚举每块墓地,统计,因为 ...

  5. SpringBoot 启动定时任务

    再项目中大多会使用定时任务来定时执行一些操作,如:文件迁移,备份等等.今天就来跟大家一起学习下如何在SpringBoot中创建定时任务. 1.新建SpringBoot项目,或在原有的项目上添加(不知道 ...

  6. 学学cookie和session

    什么是Cookie? HTTP Cookie(也叫 Web Cookie或浏览器 Cookie)是服务器发送到用户浏览器并保存在本地的一小块数据,它会在浏览器下次向同一服务器发起请求时被携带并发送到服 ...

  7. Linux运维人员-服务器组成硬件基础

    第1章 1.1关于运维人员 1.1.1 运维的职责 数据不能丢 网站7*24小时运行 保证用户体验(用户体验要好) 1.1.2 运维原则 简单.易用.高效  === 简单.粗暴 1.2 服务器 1.2 ...

  8. HTML--form表单中的label标签

    小伙伴们,你们在前面学习表单各种控件的时候,有没有发现一个标签--label,这一小节就来揭晓它的作用. label标签不会向用户呈现任何特殊效果,它的作用是为鼠标用户改进了可用性.如果你在 labe ...

  9. hdu2029

    http://acm.hdu.edu.cn/showproblem.php?pid=2029 #include<stdio.h> #include<string.h> #inc ...

  10. Objective-C——Runtime理解

    动态语言 OC是一门不折不扣的动态语言,所以它的很多机制都是动态运行时决定的.这点和C语言不一样,C语言是静态绑定,也就是编译后所有的一切都已经决定了.这一点和C语言的函数指针有些类似,很多时候函数指 ...