bzoj2429 HAOI2006 聰明的猴子

2021-07-22 15:38:35 字數 1256 閱讀 3510

description

第1行為乙個整數,表示猴子的個數m(2<=m<=500);

第2行為m個整數,依次表示猴子的最大跳躍距離(每個整數值在1–1000之間);

第3行為乙個整數表示樹的總棵數n(2<=n<=1000);

第4行至第n+3行為n棵樹的座標(橫縱座標均為整數,範圍為:-1000–1000)。

(同一行的整數間用空格分開)

output

包括乙個整數,表示可以在這個地區的所有樹冠上覓食的猴子數

sample input

1 2 3 4

6 0 0

1 01 2

-1 -1

-2 0

2 2

sample output3

hint

對於40%的資料,保證有2<=n <=100,1<=m<=100

對於全部的資料,保證有2<=n <= 1000,1<=m=500

題解

水題一道。

猴子的跳躍距離是一定的,因此,我們需要讓樹之間邊權的最大值最小,顯然是最小瓶頸生成樹即最小生成樹。

#include 

#include

#include

using

namespace

std;

int jump[501];

struct node

tree[1001];

struct edge

e[1000001];

int fa[501];

bool cmp(edge a,edge b)

int main()

int n;

scanf("%d",&n);

for(int i=1;i<=n;i++)

int cnt=0;

for(int i=1;i<=n;i++)

}sort(e+1,e+cnt+1,cmp);

int flag=0;

double minc;

for(int i=1;i<=cnt;i++)}}

int ans=0;

for(int i=1;i<=m;i++)

printf("%d",ans);

return

0; }

2429 HAOI2006 聰明的猴子

感覺回到了noip水平。最小生成樹有乙個性質就是最小生成樹必為最小瓶頸生成樹,即最大邊的邊權最小 從kruskal演算法的構造過程很容易看出這點,畢竟是從小到大加邊 於是此題很水,mst求完後最後加的那條邊就是樹上的最大邊,用每個猴子的半徑比一下就好了。include include include...

bzoj2429 聰明的猴子

題意其實就是說有很多個點,求一組邊把它們都連線起來,並且最大的那條邊最小。很明顯這就是乙個最小生成樹,是一顆保證最長邊最短的樹。剛剛學了個bor vka演算法,於是寫了兩個。include include include include include define pow x x x using ...

BZOJ2429 聰明的猴子

比較簡單的一道題目。從一棵樹出發蹦到其他所有樹,實際上,把n 1條邊就可以將這n個點連通,而最小生成樹的最大權值又是所有生成樹中最小的,因此我們需要構造一棵最小生成樹,然後將m個猴子的跳躍距離和mst的最大邊權比較,統計答案即可。1 include 2 include 3 include 4 5us...