prim:
给出一个无向图,求出最小生成树,如果该图不连通,则输出impossible。

#include<bits/stdc++.h>
using namespace std;
const int maxm = 200005;
const int inf = 0x3f3f3f3f;
struct edge{int v, w, next;
}e[maxm << 1];
int cnt, n, m, sum, t, p, now = 1;
int dis[5005], head[maxm], vis[5005];
int a, b, c;void add(int uu, int vv, int ww)
{e[++cnt].v = vv;e[cnt].w = ww;e[cnt].next = head[uu];head[uu] = cnt;
}
int main()
{cin >> n >> m;for(int i = 1; i <= m; i++){cin >> a >> b >> c;add(a, b, c); add(b, a, c);}for(int i = 1; i <= n; i++)dis[i] = inf;for(int i = head[1]; i; i = e[i].next)dis[e[i].v] = min(e[i].w, dis[e[i].v]);while(++t < n){vis[now] = 1;int minn = inf;now = -1;for(int i = 1; i <= n; i++){if(!vis[i] && minn > dis[i]){minn = dis[i];now = i;}}if(now == -1) {cout << "impossible";return 0;}sum += minn;for(int i = head[now]; i; i = e[i].next){if(!vis[e[i].v] && e[i].w < dis[e[i].v])dis[e[i].v] = e[i].w;}}cout << sum;return 0;
}

给出一个无向图,求出最小生成树。不用判断是否连通

#include<bits/stdc++.h>
using namespace std;
const int maxm = 200005;
const int inf = 0x3f3f3f3f;
struct edge{int v, w, next;
}e[maxm << 1];
int cnt, n, m, sum, t, p, now = 1;
int dis[5005], head[maxm], vis[5005];
int a, b, c;void add(int uu, int vv, int ww)
{e[++cnt].v = vv;e[cnt].w = ww;e[cnt].next = head[uu];head[uu] = cnt;
}
int main()
{cin >> n >> m;for(int i = 1; i <= m; i++){cin >> a >> b >> c;add(a, b, c); add(b, a, c);}for(int i = 1; i <= n; i++)dis[i] = inf;for(int i = head[1]; i; i = e[i].next)dis[e[i].v] = min(e[i].w, dis[e[i].v]);while(++t < n){vis[now] = 1;int minn = inf;for(int i = 1; i <= n; i++){if(!vis[i] && minn > dis[i]){minn = dis[i];now = i;}}if(dis[now] == inf) {cout << "orz";return 0;}sum += minn;for(int i = head[now]; i; i = e[i].next){if(!vis[e[i].v] && e[i].w < dis[e[i].v])dis[e[i].v] = e[i].w;}}cout << sum;return 0;
}

两者差别在于每次循环边时对now的处理

转载于:https://www.cnblogs.com/lovezxy520/p/11615273.html

【模板】 最小生成树相关推荐

  1. 最小生成树(模板题:最优布线问题,繁忙的都市,联络员)(C++)

    文章目录 序言 正文 First Promble 最优布线问题 时间限制: 1000 m s 1000 ms 1000ms 空间限制: 262144 K B 262144 KB 262144KB 题目 ...

  2. 【图论专题】最小生成树的扩展应用

    整理的算法模板合集: ACM模板 最小生成树的扩展应用 能用kruskal打死不用prim kruskal是要把所有的边都遍历一遍 图论中的超级源点就比较常用,要时刻想到它 题目列表: 题目 算法 A ...

  3. 剑鱼行动(最小生成树)

    剑鱼行动 Description 给出N个点的坐标,对它们建立一个最小生成树,代价就是连接它们的路径的长度,现要求总长度最小.N的值在100以内,坐标值在[-10000,10000].结果保留二位小数 ...

  4. 最小生成树模板总结--PrimKruskal

    一.最小生成树:连通N个点的边权值总和最小的树. 二.时间复杂度 Prim算法:时间复杂度O(|V|2+|E|),O(|E|log|V|) Kruskal算法:时间复杂度O(|E|log|E|) 算法 ...

  5. 最小生成树 洛谷P3366【模板】最小生成树 洛谷P2820 局域网

    嗯... 理解生成树的概念: 在一幅图中将所有n个点连接起来的n-1条边所形成的树. 最小生成树: 边权之和最小的生成树. 最小瓶颈生成树: 对于带权图,最大权值最小的生成树. 如何操作? 1.Pri ...

  6. kuangbin 最小生成树专题 - ZOJ - 1586 QS Network (朴素 Prim算法 模板题)

    kuangbin 最小生成树专题 - ZOJ - 1586 QS Network (朴素 Prim算法 模板题) 总题单 week 3 [kuangbin带你飞] 题单 最小生成树 + 线段树 Cli ...

  7. 最小生成树 算法思想及模板代码

    问题描述及解法分类 一般不用堆优化版的Prim算法,直接用朴素版的Prim算法. 对于稀疏图而言,点多,边少,适合用克鲁斯卡尔算法 对于稠密图而言,点少,边多,适合用普利姆算法 Prim算法 算法思想 ...

  8. 最小生成树模板 POJ——1258

    最小生成树是一个比较简单数据结构,形成最小生成树的方式有两种. 最小生成树是有图生成树,保证树的每条边的权值之和最小的生成树就叫做最小生成树,这一类的题目起初比较基础,主要是熟悉模板,POJ 1258 ...

  9. Kruskal(克鲁斯卡尔) 最小生成树 算法详解+模板

    最小生成树 在含有n个顶点的连通图中选择n-1条边,构成一棵极小连通子图,并使该连通子图中n-1条边上权值之和达到最小,则称其为连通网的最小生成树. 例如,对于如上图G4所示的连通网可以有多棵权值总和 ...

  10. 最小生成树-prim算法模板

    题目描述 如题,给出一个无向图,求出最小生成树,如果该图不连通,则输出orz 输入输出格式 输入格式: 第一行包含两个整数N.M,表示该图共有N个结点和M条无向边.(N<=5000,M<= ...

最新文章

  1. pytorch方法,Tensor及其基本操作_重点
  2. 【图解】算法原理!通俗理解机器学习算法
  3. activity使用dialog主题
  4. 计算机网络部分(共44题),2018年10月自考04741计算机网络原理试卷及答案
  5. 【转贴】大型ORACLE数据库优化设计方案
  6. Spring MVC:表单处理卷。 4 –单选按钮
  7. 1+X web中级 Laravel学习笔记——Eloquent ORM查询、更新、删除、新增
  8. leetcode刷题:三数之和
  9. win10中cmd拒绝访问授权
  10. 转:c++builder读写INI文件
  11. 125条常见的java面试笔试题大汇总1
  12. 异构SOA系统架构之Asp.net实现(兼容dubbo)
  13. SWAT模型 建模方法、实例应用、高级进阶
  14. eclipse各版本对应JDK版本要求
  15. matlab波特率,波特率定义及波特率计算公式小结
  16. SharePoint Designer 2010 简介 - SharePoint Designer - Office.com
  17. 第五章 执行计划详解
  18. 悟空问答 模板 html,WeCenter仿悟空问答模板
  19. Axure RP 9基础教程(四)-文件及文件设置
  20. 服务器集群可视化监控-Prometheus+Grafana

热门文章

  1. EduCoder 机器学习 逻辑回归
  2. Python中带下划线_的变量和函数命名的用法
  3. Python3 关键字nonlocal和global的用法与区别
  4. 2019第十届蓝桥杯C/C++ A组省赛 —— 第三题: 最大降雨量
  5. Go 语言切片(Slice)
  6. 数据挖掘(data mining),机器学习(machine learning),和人工智能(AI)的区别是什么? 数据科学(data science)和商业分析(business analytics
  7. 【C++】Visual Studio教程(八) -修复 Visual Studio
  8. 【STM32】OLED简介
  9. c语言中lookup函数功能,Lookup函数详解
  10. 2007标注没有文字_应用技巧:CAD在机械工程制图中尺寸标注