题目链接:http://poj.org/problem?id=1679

判断最小生成数是否唯一:如果唯一这权值和次小生成树不同,否则相同;

  1. #include<stdio.h>
  2. #include<string.h>
  3. #include<map>
  4. #include<iostream>
  5. #include<algorithm>
  6. #include<math.h>
  7. #define N 110
  8. #define INF 0xfffffff
  9.  
  10. using namespace std;
  11.  
  12. int Max[N][N], used[N][N], vis[N], maps[N][N], dist[N], fa[N], n;
  13.  
  14. void Init()
  15. {
  16. memset(vis, , sizeof(vis));
  17. memset(used, , sizeof(used));
  18. memset(Max, , sizeof(Max));
  19. memset(fa, , sizeof(fa));
  20. for(int i=; i<=n; i++)
  21. {
  22. dist[i] = INF;
  23. for(int j=; j<=n; j++)
  24. if(i == j)
  25. maps[i][j] = ;
  26. else
  27. maps[i][j] = INF;
  28. }
  29. }
  30.  
  31. int Prim(int start)
  32. {
  33. int ans=;
  34. for(int i=; i<=n; i++)
  35. {
  36. dist[i] = maps[start][i];
  37. fa[i] = start;
  38. }
  39. vis[start] = ;
  40. for(int i=; i<=n; i++)
  41. {
  42. int Min = INF, index = -;
  43. for(int j=; j<=n; j++)
  44. {
  45. if(vis[j]== && Min > dist[j])
  46. {
  47. Min = dist[j];
  48. index = j;
  49. }
  50. }
  51. if(index == -)break;
  52. vis[index] = ;
  53. ans += Min;
  54. used[fa[index]][index] = used[index][fa[index]] = ;
  55. for(int j=; j<=n; j++)
  56. {
  57. if(vis[j] == && index != j)
  58. {
  59. Max[index][j] = Max[j][index] = max(Max[fa[index]][j], dist[index]);
  60. }
  61. else if(vis[j] == && dist[j] > maps[index][j])
  62. {
  63. dist[j] = maps[index][j];
  64. fa[j] = index;
  65. }
  66. }
  67. }
  68. return ans;
  69. }
  70.  
  71. int SMST(int ans)
  72. {
  73. int Min = INF;
  74. for(int i=; i<=n;i++)
  75. {
  76. for(int j=i+; j<=n; j++)
  77. {
  78. if(used[i][j]== && maps[i][j] != INF)
  79. Min=min(Min, ans-Max[i][j]+maps[i][j]);
  80. }
  81. }
  82. return Min;
  83. }
  84.  
  85. int main()
  86. {
  87. int T, m, a, b, c;
  88. scanf("%d", &T);
  89. while(T--)
  90. {
  91. scanf("%d%d", &n, &m);
  92. Init();
  93. for(int i=; i<m; i++)
  94. {
  95. scanf("%d%d%d", &a, &b, &c);
  96. maps[a][b] = maps[b][a] = c;
  97. }
  98. int num1 = Prim();
  99. int num2 = SMST(num1);
  100. if(num1 != num2)
  101. printf("%d\n", num1);
  102. else
  103. printf("Not Unique!\n");
  104. }
  105. return ;
  106. }

The Unique MST----poj1679次小生成树的更多相关文章

  1. POJ-1679 The Unique MST(次小生成树、判断最小生成树是否唯一)

    http://poj.org/problem?id=1679 Description Given a connected undirected graph, tell if its minimum s ...

  2. POJ1679 The Unique MST 【次小生成树】

    The Unique MST Time Limit: 1000MS   Memory Limit: 10000K Total Submissions: 20421   Accepted: 7183 D ...

  3. POJ1679 The Unique MST【次小生成树】

    题意: 判断最小生成树是否唯一. 思路: 首先求出最小生成树,记录现在这个最小生成树上所有的边,然后通过取消其中一条边,找到这两点上其他的边形成一棵新的生成树,求其权值,通过枚举所有可能,通过这些权值 ...

  4. The Unique MST(次小生成树)

    Time Limit: 1000MS   Memory Limit: 10000K Total Submissions: 22335   Accepted: 7922 Description Give ...

  5. POJ1679The Unique MST(次小生成树)

    The Unique MST Time Limit: 1000MS   Memory Limit: 10000K Total Submissions: 25203   Accepted: 8995 D ...

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

    The Unique MST Time Limit: 1000MS   Memory Limit: 10000K Total Submissions: 24034   Accepted: 8535 D ...

  7. POJ 1679:The Unique MST(次小生成树&amp;&amp;Kruskal)

    The Unique MST Time Limit: 1000MS   Memory Limit: 10000K Total Submissions: 19941   Accepted: 6999 D ...

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

    题目:poj 1679 The Unique MST 题意:给你一颗树,让你求最小生成树和次小生成树值是否相等. 分析:这个题目关键在于求解次小生成树. 方法是,依次枚举不在最小生成树上的边,然后加入 ...

  9. POJ 1679 The Unique MST (次小生成树)题解

    题意:构成MST是否唯一 思路: 问最小生成树是否唯一.我们可以先用Prim找到一棵最小生成树,然后保存好MST中任意两个点i到j的这条路径中的最大边的权值Max[i][j],如果我们能找到一条边满足 ...

  10. poj 1679 The Unique MST 【次小生成树+100的小数据量】

    题目地址:http://poj.org/problem?id=1679 2 3 3 1 2 1 2 3 2 3 1 3 4 4 1 2 2 2 3 2 3 4 2 4 1 2 Sample Outpu ...

随机推荐

  1. 【Linux】将终端的命令输出保存为txt文本文件

    Linux中的终端很方便,可以直接复制粘贴的. 之后开一个gedit文本编辑器,把复制到的内容粘贴就可以的. 不像windows的cmd控制台,需要先右键标题栏,选择编辑->全选/标记,在右键标 ...

  2. codeforces水题100道 第三题 Codeforces Beta Round #47 A. Domino piling (math)

    题目链接:http://www.codeforces.com/problemset/problem/50/A题意:一个NxM的举行中最多能放多少个1x2的矩形.C++代码: #include < ...

  3. MySql数据库设计表添加字段

    当要添加的字段属于整型,需要设置默认值 或者: alter table fp_user_base add hasPwd tinyint(4) not null default 0;

  4. Effective Java (6) - 消除过期的对象引用

    一.引言 很多人可能在想这么一个问题:Java有垃圾回收机制,那么还存在内存泄露吗?答案是肯定的,所谓的垃圾回收GC会自动管理内存的回收,而不需要程序员每次都手动释放内存,但是如果存在大量的临时对象在 ...

  5. Java 8 特性 – 终极手册

    简介 毫无疑问,Java 8的发布是自Java 5(它的发布已远在2004年)以来在Java世界中最重大的事情.它带来了超多的新特性,这些特性分别被加入到Java语言本身.Java编译器.类库.工具类 ...

  6. POP3协议分析

    http://m.blog.csdn.net/bripengandre/article/details/2192111 POP3协议分析 第1章.     POP3概述 POP3全称为Post Off ...

  7. Elasticsearch学习之查询去重

    1. 实现查询去重.分页,例如:实现依据qid去重,createTime排序,命令行为: GET /nb_luban_answer/_search { "query": { &qu ...

  8. [转]F5负载均衡名词LTM和GTM

    LTM就是本地流量管理,也就是通常所说的服务器负载均衡.可以将多个提供相同服务的设备(pool)虚拟成一个逻辑设备,供用户访问.也就是说,对于用 户来讲,看到的只有一个设备,而实际上用户是服务请求是在 ...

  9. MySQL对数据表进行分组查询(GROUP BY)

    MySQL对数据表进行分组查询(GROUP BY) GROUP BY关键字可以将查询结果按照某个字段或多个字段进行分组.字段中值相等的为一组.基本的语法格式如下: GROUP BY 属性名 [HAVI ...

  10. PostgreSQL9.3安装tds_fdw扩展

    PostgreSQL从9.x开始支持所谓的外表的功能,就是在PostgreSQL中通过安装一些扩展再进行一些配置可以在本地建立一个外表映射到其他不同类型的数据库(可以大致理解为跨越PostgreSQL ...