最小生成树唯一性问题

Memory: 824K Time: 157MS
https://code.csdn.net/snippets/1632570

题意

RT.输入一张图,判断它的最小生成树是否唯一。
如果唯一,则输出这个生成树的值。否则输出Not Unique!

分析

如果最小生成树不是唯一的,那么肯定存在另一棵MST,它的边和第一次求出的MST不完全相同,但是值的和一样。
所以,求出第一棵树,枚举它的每一条边,删除之,再求MST,值相同则不唯一(此时求出的这棵新树即为另一棵MST)。如果值不同,记着把这条边恢复回去,再试其他边。

出现的问题

  1. 没注意到是无向图(纯粹是秀逗)
  2. 算完一组数据忘了清空edge[].del=false WA
  3. 去掉边后整张图可能变得不连通,这时求出的最小生成树值无意义。数据里刚好有不连通图没考虑到就Not Unique的,所以WA
    解决方案:求完mst,看是不是加入了所有点(Prim)
for(int i=1; i<=n; ++i)if(!vis[i]) return 0x3f3f3f3f;

技巧

1.同一个求最小生成树的算法过程,可以记录边,可以不记录边。

inline int prim(int *sav=0)
//传入sav则保存边,否则不保存
if(sav) *(sav++)=e;

2.特别的存储方式,正向边反向边快速转换
通过^1的方式,同时删除一对边

for(int i=1; i<=m; ++i)
{//...addedge(2*i, s, t, w);addedge(2*i+1, t, s, w);
}
//...
for(int i=1; i<=n-1; ++i)
{edge[mst[i]].del=true;edge[mst[i]^1].del=true;//...edge[mst[i]].del=false;edge[mst[i]^1].del=false;
}

POJ1679 The Unique MST相关推荐

  1. POJ 1679 The Unique MST(次小生成树)

    求次小生成树的两种方法. 第一种:Kruskal算法比较好操作.先求一遍最小生成树,然后再记录最小生成树上的边.然后再枚举删去最小生成树上的边,再求最小生成树,如果求出的最小生成树的花费等于第一次最小 ...

  2. The Unique MST 判断生成树是否唯一

    The Unique MST 题目抽象:给你一个连通无向网,判断生成树是否唯一. 分析 :判定最小生成树是否唯一的一个正确思路为: 1) 对图中每条边,扫描其他边,如果存在相同权值的边,则对该边作标记 ...

  3. poj 1679 The Unique MST

    题目连接 http://poj.org/problem?id=1679 The Unique MST Description Given a connected undirected graph, t ...

  4. 【POJ1679】The Unique MST(非严格次小生成树)

    problem 给出一个连通无向图,判断它的最小生成树是否唯一 如果唯一,输出生成树的大小,否则输出"Not Unique!" solution 直接求非严格次小生成树 如果次小生 ...

  5. The Unique MST POJ1679

    题目: Given a connected undirected graph, tell if its minimum spanning tree is unique. Definition 1 (S ...

  6. POJ 1679 - The Unique MST(次小生成树)

    题目链接 https://vjudge.net/problem/POJ-1679 Given a connected undirected graph, tell if its minimum spa ...

  7. 【POJ 1679 The Unique MST】最小生成树

    无向连通图(无重边),判断最小生成树是否唯一,若唯一求边权和. 分析生成树的生成过程,只有一个圈内出现权值相同的边才会出现权值和相等但"异构"的生成树.(并不一定是最小生成树) 分 ...

  8. poj 1679: The Unique MST【次小生成树】

    题目链接 参考博客 希望注释足够清楚..欢迎指出不足~ #include<cstdio> #include<cstring> #include<algorithm> ...

  9. POJ - 1679 The Unique MST

    题意: 给定一个有 n 个点的无向图,判断最小生成树是否唯一. 链接: https://vjudge.net/problem/POJ-1679 解题思路: 考虑在 Kruskal 算法基础上进行判断. ...

最新文章

  1. CentOS查看主板型号、CPU、显卡、硬盘等信息
  2. wpf Command Binding
  3. VMware虚拟机网络模式详解 NAT模式
  4. c语言常量的正确表示const,C语言中的const和free用法详解
  5. Spring MVC 返回NULL时客户端用$.getJSON的问题
  6. 揭密|淘宝服务端千万级高并发架构的演进之路
  7. Windows版本nginx
  8. Mac 版pr 破解教程,亲测可行。
  9. cocos2dx资料汇总 - 持续更新
  10. 【笔记:傅里叶分析】数学基础——傅里叶级数与傅里叶变换
  11. win10系统迁移到固态硬盘ssd
  12. 华为云数据库三大优势
  13. c语言lzma算法,在C中使用C-LZMA-SDK解压缩LZMA返回SZ_ERROR_DATA,因为输入流的第一个字节是!= 0...
  14. This inspection finds all usages of methods that have @since tag in their documentation.
  15. 数据引擎助力车娱融合新业态 让秒杀狂欢更从容
  16. 程序编写经验教训_编写38本编程书籍的经验教训
  17. Pyecharts3D图:常见的3D图
  18. 鸿蒙系统适配微信,微信鸿蒙版本下载-微信鸿蒙系统app官方下载 v8.0.3-手游之家...
  19. ZBrush中绘制层是什么意思?
  20. 初入职场|入门互联网产品经理

热门文章

  1. 「MOSS - 00」MOSS队:团队介绍
  2. 计算机程序设计艺术 介绍
  3. ChatGPT炒股:自动批量下载choice每日热门研报
  4. 打开百度跳转到另外一个网站、解决百度搜索引擎打开自己的网站却跳转到其他网站
  5. Acwing 1077.皇宫看守
  6. Dart语言——45分钟快速入门(上)
  7. 查看服务器用户所占空间
  8. java timer 轮询_java 定时器分析
  9. DirectSound学习1
  10. 老外的两个4-20ma光耦隔离输出电路