time limit: 10 sec memory limit: 128 mb
submit: 693 solved: 463
[submit][status][discuss]在乙個熱帶雨林中生存著一群猴子,它們以樹上的果子為生。昨天下了一場大雨,現在雨過天晴,但整個雨林的地表還是被大水淹沒著,部分植物的樹冠露在水面上。猴子不會游泳,但跳躍能力比較強,它們仍然可以在露出水面的不同樹冠上來回穿梭,以找到喜歡吃的果實。
現在,在這個地區露出水面的有n棵樹,假設每棵樹本身的直徑都很小,可以忽略不計。我們在這塊區域上建立直角座標系,則每一棵樹的位置由其所對應的座標表示(任意兩棵樹的座標都不相同)。
在這個地區住著的猴子有m個,下雨時,它們都躲到了茂密高大的樹冠中,沒有被大水沖走。由於各個猴子的年齡不同、身體素質不同,它們跳躍的能力不同。有的猴子跳躍的距離比較遠(當然也可以跳到較近的樹上),而有些猴子跳躍的距離就比較近。這些猴子非常聰明,它們通過目測就可以準確地判斷出自己能否跳到對面的樹上。
【問題】 現已知猴子的數量及每乙個猴子的最大跳躍距離,還知道露出水面的每一棵樹的座標,你的任務是統計有多少個猴子可以在這個地區露出水面的所有樹冠上覓食。
第1行為乙個整數,表示猴子的個數m(2<=m<=500);
第2行為m個整數,依次表示猴子的最大跳躍距離(每個整數值在1--1000之間);
第3行為乙個整數表示樹的總棵數n(2<=n<=1000);
第4行至第n+3行為n棵樹的座標(橫縱座標均為整數,範圍為:-1000--1000)。
(同一行的整數間用空格分開)
包括乙個整數,表示可以在這個地區的所有樹冠上覓食的猴子數
4
1 2 3 4
6 0 0
1 01 2
-1 -1
-2 0
2 2
3
解題思路:一眼就看出來的最小瓶頸生成樹。
#include
#include
#include
#include
#include
using namespace std;
struct ss
q[1010000];
int f[1001],v[1001],x[1001],y[1001];
int m,n,len;
inline int read()
while (y>='0' && y<='9')
return x*f;
}double pow(int x1,int y1,int x2,int y2)
bool cmp(ss xx,ss yy)
int main()
n=read();
for (int i=1;i<=n;++i)
for (int i=1;i<=n-1;++i)
for (int j=i+1;j<=n;++j)
if (i!=j)
double ans=-1;
sort(q+1,q+len+1,cmp);
for (int i=1;i<=len;++i)
}int sum=0;
for (int i=1;i<=m;++i)
if (v[i]>=ans)
++sum;
printf("%d",sum);
}
uva1395(最小瓶頸生成樹變形)
最小瓶頸生成樹 最大的邊權值在g的所有生成樹中是最小的。瓶頸生成樹的值為t中最大權值邊的權。無向圖的最小生成樹一定是瓶頸生成樹,但瓶頸生成樹不一定是最小生成樹。題意 求一顆生成樹,滿足最大邊和最小邊之差最小 思路分析 100個頂點,5000條邊,用kruskal演算法,暴力列舉從每條邊開始構造最小生...
洛谷P2504 聰明的猴子 最小瓶頸樹
題目大意 給定一張 n 個頂點的完全圖,邊有邊權,求該完全圖的一棵最小瓶頸樹。最小瓶頸樹 一棵最大邊權值在同一張圖的所有生成樹中最小,即 最大邊權值最小的生成樹,其值為該樹的最大邊權的權值。引理1 最小生成樹一定是一棵最小瓶頸樹。證明 若最小生成樹不是最小瓶頸樹,則意味著存在一條邊的權值大於最小瓶頸...
bzoj 2561 最小生成樹
給定乙個邊帶正權的連通無向圖g v,e 其中n v m e n個點從1到n依次編號,給定三個正整數u,v,和l u v 假設現在加入一條邊權為l的邊 u,v 那麼需要刪掉最少多少條邊,才能夠使得這條邊既可能出現在最小生成樹上,也可能出現在最大生成樹上?第一行包含用空格隔開的兩個整數,分別為n和m 接...