POJ 1679 The Unique MST

 /*
<1>要求:这道题的要求是给定一个无向联通图,判断这个图的最小生成树MST是不是唯一的,如果是唯一的则
打印出最小值,如果不是唯一的给出提示
<2>分析:采用Kruskal算法来计算最小生成树,仔细分析其过程不难发现这个图的MST不唯一的充分必要条件是
在Kruskal运算过程中如果选中的当前边a构成了环,且在所有包含这条边的环中如果存在和这条边权值相等的
边b,则MST不唯一,因为总是可以利用a取代b构成一个新的MST.算法清楚了, 那么实现最难的地方就是找环了
<3>实现:为了提高计算的速度,我将边保存两份,一份用结构表示,存储所有边,用来排序和MST遍历边用;
另外一份用邻接表表示有提高计算环时候的处理速度,数据结构确定了那么很容易利用DFS回溯,在DFS回溯的
过程中判断环以及是否有和目标边权值相等的边,判断环没有用并查集而是直接在DFS中判断
6085976    bobten2008    1679    Accepted    256K    0MS    C++    2201B    2009-11-03 20:42:08
*/

#include <iostream>
#include <algorithm>
#define MAX_E 5010
#define MAX_N 105
using namespace std;

//MST算法中用来表示当前节点是否被访问过
bool v[MAX_N + 1];
//存储所有边
struct edge
{
    int from, to, w;
}edge

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值