最小生成树——(性质)其最大边权为生成树中最大边权最小的——(例题)承包池塘的青蛙

最小生成树不仅可以得到最小的权值之和,其最大边权为生成树中最大边权最小的。

*一道例题

1:承包池塘的青蛙
查看 提交 统计 提问
总时间限制: 1000ms 内存限制: 128000kB
描述
某池塘有N片荷叶, M只青蛙, 青蛙喜欢在荷叶之间跳来跳去.

给出青蛙们的最大可跳跃的距离Ci, 以及荷叶的坐标, 当忽略荷叶的直径.如果两片荷叶A和B间的距离小于某只青蛙F的最大可跳跃距离时, 可认为青蛙F可以从A跳到B, 也可以从B跳到A.

求能够从任意荷叶出发, 仅通过跳跃就能到达其它任意荷叶的青蛙个数.

输入
第一行一个整数, 表示M(2<=M<=500)
第二行为M个整数, 依次表示Ci(每个整数值在1—1000之间)
第三行为一个整数, 表示N(2<=N<=1000)
第四行至第N+3行, 每行两个数, 分布表示N个荷叶的坐标(横纵坐标均为整数, 范围为:-10000–10000)
输出
输出只有一行, 即所求满足条件的青蛙只数.
样例输入
4
100 200 300 400
6
0 0
100 0
100 200
-100 -100
-200 0
200 200
样例输出
3

疑问在于:为什么最小生成树的最长边是青蛙跳跃距离的下限?

首先,青蛙要到达所有节点,生成的图一定是经过所有点的。
存在无数个这样的图,而决定青蛙能否成功的只有这张图的最长边;
该图可能有环也可能无环,而有环图可以删掉某些边变为无环图,最长边只可能变小了或不变->最长边下线必定会在无环图(生成树)中找到;

确定了路线一定为生成树,接下来讨论为何是最小生成树。
我们用反证法:存在最小生成树,最长边为e;假设存在一个一般生成树,最长边eb且eb

#include <iostream>
#include <queue>
#include <list>
#include <stdio.h>
#include <vector>
#include <stdlib.h>
#include <string.h>
using 
  • 1
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值