题目链接

参考博客

希望注释足够清楚。。欢迎指出不足~

#include<cstdio>
#include<cstring>
#include<algorithm>
using namespace std;const int maxn=110;
const int INF=0x3f3f3f3f;int n,m;
int mp[maxn][maxn];
int maxlen[maxn][maxn];        //maxlen[i][j]表示//生成树上,从 点i到点j的所有边中的最大边长
int dis[maxn],pre[maxn];    //dis表示的其实是边长
int vis[maxn];
int mst;int prim()
{mst=0;vis[1]=1;for(int i=1; i<=n; i++)dis[i]=mp[1][i],pre[i]=1;for(int i=1; i<n; i++)    //总共需要再加入n-1个节点
    {int min_dis=INF,nx,pr;//nx表示下一个要进入MST中的结点//pr表示与nx相连的已经在MST中的结点//min_dis表示MST与V-MST间的最短距离 for(int j=1; j<=n; j++)if(!vis[j]&&dis[j]<min_dis)nx=j,min_dis=dis[nx];pr=pre[nx];mst+=mp[nx][pr]; maxlen[nx][pr]=maxlen[pr][nx]=mp[nx][pr];for(int j=1; j<=n; j++) if(vis[j])    //更新从j沿MST到nx的最小边长 maxlen[j][nx]=maxlen[nx][j]=max(maxlen[j][pr],maxlen[nx][pr]);vis[nx]=1;for(int j=1;j<=n;j++)if(!vis[j]&&mp[nx][j]<dis[j])dis[j]=mp[nx][j],pre[j]=nx;}for(int i=1;i<n;i++)for(int j=i+1;j<=n;j++)if(pre[i]==j||pre[j]==i)    //此时边i-j在MST中 continue; else if(maxlen[i][j]==mp[i][j])//存在不止一个MST return 0;return 1; //只有一个MST
}void init()
{memset(mp,INF,sizeof(mp));memset(maxlen,-INF,sizeof(maxlen));    //之后要不断取max进行更新 memset(vis,0,sizeof(vis));
}int main()
{int T;scanf("%d",&T);while(T--){init();scanf("%d%d",&n,&m);for(int i=0; i<m; i++){int u,v,w;scanf("%d%d%d",&u,&v,&w);mp[u][v]=mp[v][u]=w;}if(prim()) printf("%d\n",mst);else puts("Not Unique!");}
}

转载于:https://www.cnblogs.com/Just--Do--It/p/6480663.html

poj 1679: The Unique MST【次小生成树】相关推荐

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

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

  2. poj 1679 The Unique MST

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

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

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

  4. POJ - 1679 The Unique MST

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

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

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

  6. (POJ-1679)次小生成树模板

    原题链接:http://poj.org/problem?id=1679 The Unique MST Given a connected undirected graph, tell if its m ...

  7. poj 1679 次小生成树

    次小生成树的求法: 1.Prime法 定义一个二维数组F[i][j]表示点i到点j在最小生成树中的路径上的最大权值.有个知识就是将一条不在最小生成树中的边Edge加入最小生成树时,树中要去掉的边就是E ...

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

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

  9. `Computer-Algorithm` 最小生成树MST,Prim,Kruskal,次小生成树

    Contents 最小生成树 Algorithm Prim Code Kruskal Prim&KruskalPrim \& KruskalPrim&Kruskal算法的性质 ...

最新文章

  1. linux c 控制cpu占用率
  2. python空类型-在Python中__________表示空类型。
  3. heat 用法 示例
  4. 华为云 手机 电脑登录不了怎么办 账户_华为云手机能解决芯片困难,是否真的实在,来西瓜视频找答案...
  5. 阿里面试题BIO和NIO数量问题附答案和代码
  6. $.ajax返回的JSON无法执行success只进行error的解决方法
  7. yum 查看java版本_如何查找YUM安装的JAVA_HOME环境变量详解
  8. map-based exploration of intrinsic shape differences and variability
  9. 通俗易懂的monteCarlo积分方法(八)
  10. oracle11g-RHEL5.8-Kernel Parameters and Resource Limits
  11. (转)三年后,我手里的比特币值多少钱
  12. Kylin 与 Spark SQL相比,有哪些差异和优势?
  13. 取整运算⌊a⌋, ⌈a⌉的一些数学理论的总结
  14. 帝国php获取栏目id,帝国CMS如何获取子栏目
  15. 百合网“免费”革命 一场饮鸩止渴的大戏
  16. 关于账本数据库:你想知道的这里都有
  17. Excel怎么将一列数据合并到一个单元格中
  18. 什么专业可以留学计算机动画,美国留学计算机动画专业怎么样?
  19. IE浏览器CSS hack方式一览
  20. 太阳神三国杀学习第一步--编译并运行(qt5.7.0+vs2015)

热门文章

  1. java ioexception异常_12. Java IO: 异常处理
  2. 操作系统:电脑的回收站的秘密你知道吗?
  3. ES6 解构赋值的用法笔记
  4. C#判断某天是否是周末或者节假日示例
  5. ASP.NET 构建高性能网站 架构设计
  6. EF调用存储过程实现分页
  7. JQuery七个常犯的错误
  8. mysql调度触发器,MySQL触发器:达到某个datetime时更新
  9. Linux的软件包封装格式有,linux软件安装包详解---全
  10. MYSQL读书笔记---运算符、字符串操作