BZOJ2429 聰明的猴子

2022-07-16 18:54:22 字數 989 閱讀 8795

比較簡單的一道題目。。。

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

1 #include 2 #include 3 #include 4

5using

namespace

std;67

const

int maxm = 505, maxn = 1e3 + 5;8

9int

monkey[maxm], treex[maxn], treey[maxn];

1011

struct

edge

17 } edge[maxn * maxn / 2

];18

19 inline int pw2(int

x) 22

23 inline double dis(int i, int

j) 26

27int

m, n, eid, fa[maxn];

2829

int dj_find(int

i) 33

34 inline void dj_merge(int a, int

b) 37

38 inline double

kruskal() 48}

49return

edge[eid].w;50}

5152

intmain()

63int ans = 0;64

double me =kruskal();

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

66if (monkey[i] >= me) ++ans;

67 printf("%d"

, ans);

68return0;

69 }

ac**

bzoj2429 聰明的猴子

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

2429 HAOI2006 聰明的猴子

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

bzoj 2429 最小瓶頸生成樹

time limit 10 sec memory limit 128 mb submit 693 solved 463 submit status discuss 在乙個熱帶雨林中生存著一群猴子,它們以樹上的果子為生。昨天下了一場大雨,現在雨過天晴,但整個雨林的地表還是被大水淹沒著,部分植物的樹冠露...