题目链接

https://www.acwing.com/problem/content/description/860/

思路

prim算法的思想就是,我们维护一个最优集合,然后寻找所有不在集合的点连向集合的最短边,然后将这个点加入集合,并将权值加入总权值中,对于每一个最短边的点,我们用该点更新一下其他点到集合的距离就好了(这里和迪杰斯特拉不太一样,迪杰斯特拉是更新下一个点到源点的距离,而这里是更新没在集合中的点到集合的距离)

代码

#include<bits/stdc++.h>
using namespace std;const int N = 500+10;int n,m;
int g[N][N];
int dis[N];
int vis[N];
const int INF = 0x3f3f3f3f;int prim(){memset(dis,0x3f,sizeof dis);int ans = 0;for(int i = 0;i < n; ++i){int t = -1;for(int j = 1;j <= n; ++j){if(!vis[j] && (t == -1 || dis[j] < dis[t])) t = j;}if(i && dis[t] == INF) return INF;//如果不是第一个点并且下一个点的位置为正无穷,说明不联通if(i) ans += dis[t];//如果不是第一个点,那么就说明有一条边连向我们的最小生成树集合中vis[t] = true;//将当前的t更新为访问for(int j = 1;j <= n; ++j) if(!vis[j]) dis[j] = min(dis[j],g[t][j]);//如果不在集合中,那么就选择是否更新}return ans;
}int main(){scanf("%d%d",&n,&m);memset(g,0x3f,sizeof g);for(int i = 0;i < m; ++i) {int u,v,w;scanf("%d%d%d",&u,&v,&w);g[u][v] = min(g[u][v],w);g[v][u] = g[u][v];}int ans = prim();if(ans == INF) printf("impossible");else printf("%d\n",ans);return 0;
}

AcWing 858. Prim算法求最小生成树(稠密图)相关推荐

  1. 最小生成树板子-AcWing 858. Prim算法求最小生成树

    题目分析 来源:acwing 分析: 给定一张边带权的无向图 G=(V,E),其中 V 表示图中点的集合,E 表示图中边的集合,n=|V|,m=|E|. 由 V 中的全部 n 个顶点和 E 中 n−1 ...

  2. prim算法 求最小生成树

    最小生成树Prim算法理解 标签: Prim算法理解最小生成树Prim 2014-08-16 18:49 18482人阅读 评论(5) 收藏 举报 版权声明:本文为博主原创文章,未经博主允许不得转载. ...

  3. prim算法求最小生成树_最小生成树的两种方法(Kruskal算法和Prim算法)

    关于图的几个概念定义: 连通图:在无向图中,若任意两个顶点vivi与vjvj都有路径相通,则称该无向图为连通图. 强连通图:在有向图中,若任意两个顶点vivi与vjvj都有路径相通,则称该有向图为强连 ...

  4. Prim算法求最小生成树

    一.Prim算法 prim算法是用来求最小生成树的问题具体就是在一个图的n个节点找到n-1条边,使这n-1条边的权值最小 二.修路问题 在狗熊岭有如下七个村庄 村庄道路连接情况和距离如图所示 现在需要 ...

  5. python最小生成树算法_图算法|Prim算法求最小生成树

    01 - 一个实际问题 要在n个城市之间铺设光缆,要求有2个: 这 n 个城市的任意两个之间都可以通信: 铺设光缆的费用很高,且各个城市之间铺设光缆的费用不同,因此要使铺设光缆的总费用最低. 如下所示 ...

  6. prim算法求最小生成树_克鲁斯卡尔算法(Kruskal算法)求最小生成树

    上一节介绍了求最小生成树之普里姆算法.该算法从顶点的角度为出发点,时间复杂度为O(n2),更适合与解决边的绸密度更高的连通网.本节所介绍的克鲁斯卡尔算法,从边的角度求网的最小生成树,时间复杂度为O(e ...

  7. Java 版 Prim 算法求最小生成树

    最小生成树: 一个具有n个顶点的加权的无相连通图,用n-1条边连接这n个顶点,并且使得连接之后的所有边的权值之和最小的树. Prim算法:先以一个结点作为最小生成树的第一个结点,然后以迭代的方式找出与 ...

  8. AcWing 859. Kruskal算法求最小生成树(稀疏图)

    题面连接 https://www.acwing.com/problem/content/861/ 思路 没啥好说的,就是贪心+破圈法,然后不断将最短的边加入集合中,可以参考我这篇博客 https:// ...

  9. 最小生成树板子-AcWing 859. Kruskal算法求最小生成树

    题目分析 来源:acwing 分析: Kruskal算法思路: 将所有边按权重从小到大排序.算法瓶颈在此O(m×logm)O(m\times logm)O(m×logm) 枚举每条边:a和b是两个点, ...

最新文章

  1. Google guava cache源码解析1--构建缓存器(3)
  2. 城市轨道交通运营票务管理论文_城市轨道交通票务组织管理论文
  3. 用于WWW传输控制的是HTML,控制传输
  4. leetcode 263, 264, 1201, 313. Ugly Number I, II, III, Super Ugly Number(leetcode 丑数问题合集)
  5. java 中文 编译_java编译带中文是显示乱码的错误
  6. 文本框输入怎么样让键盘消失
  7. random number in groovy
  8. SQL Server子查询实例
  9. 如何构建全球最佳数据中心平台
  10. Linux下OpenCV摄像头录像(c++)
  11. 软件找不到msvcp140.dll无法继续执行怎么办
  12. Excel数据透视表如何创建?
  13. 3.破解百度翻译 输入keyWord返回对应翻译的数据
  14. Onvif协议学习:14、球机云台控制PTZ
  15. python统计中英文字符个数-Python统计英文、中文、数字、空格等字符数
  16. MFC简易音乐播放器
  17. vue3—reactive如何更改属性
  18. 挂接Google翻译,下载音频
  19. 基于vue2+element+springboot+mysql+jpa+mybatis的图书管理系统
  20. (三)千隆问屈术 让你成为别人的神 让人觉得你是权威专家的沟通模式

热门文章

  1. Bristol的第18篇密码学
  2. P1262 间谍网络
  3. 如何计算tomcat线程池大小?
  4. 图解操作系统系列-概述
  5. Linux scp 两台服务器传输文件
  6. Java并发编程之volatile关键字
  7. Python大佬分析了15万歌词,告诉你民谣歌手们到底在唱什么
  8. ASP.NET 5系列教程
  9. eclipse Dynamic web module相关问题
  10. MySQL内核月报 2014.10-MySQL· 捉虫动态·binlog重放失败