知识点

  • 树是没有环的图
  • 在树中,任意顶点r和顶点v之间必然存在着1条路径
  • 生成树:拥有图G的所有顶点,并且在保证自身是树的前提下拥有尽量多的边。
  • 最小生成树(MST):个边权值总和最小的生成树
  • 普里姆算法
    • 设图G(V,E)所有顶点的集合为V,MST中的顶点的集合为T。
    • 从G中选取任意顶点r作为MST的根,将其添加到T。
    • 循环执行下述处理,直到T=V。在连接T内顶点与V-T内顶点的边中选取权值最小的边( pu p_u,u),将其作为MST的边,并将u添加到T中。

问题链接

ALDS1_12_A:Minimum Spanning Tree

问题内容

给出所有顶点之间的权值,如果无法到达则显示为-1,输出最小生成树的权值总和。

思路

利用普里姆算法求出最小生成树的权值总和。

代码

#include <iostream>
#include <cstdio>
#include <cstring>
#include <stack>
#include <vector>
using namespace std;
const int maxx = 1010;
const int INF = 1 << 30;
int n, m[maxx][maxx];
int u, num, v;
int flag[maxx];int prim() {// d数组是保存V-T, p数组是记录MST的int d[maxx], p[maxx];for (int i = 0; i < n; i++) {d[i] = INF;p[i] = -1;flag[i] = 0;}d[0] = 0;while (1) {int minv = INF;u = -1;// 比较出权值最小的边for (int i = 0; i < n; i++) {if (minv > d[i] && flag[i] == 0) {u = i;minv = d[i];}}if (u == -1)break;// 标记已经加入MSTflag[u] = 1;// 更新未访问的点与已经访问的点之间的最小的边(相对于每个点)for (int v = 0; v < n; v++) {if (flag[v] == 0 && m[u][v] != INF && d[v] > m[u][v]) {d[v] = m[u][v];p[v] = u;}}}int ans = 0;for (int i = 0; i < n; i++)if (p[i] != -1)ans += m[i][p[i]];return ans;
}
int main()
{memset(flag, 0, sizeof(flag));scanf("%d", &n);for (int i = 0; i < n; i++) {for (int j = 0; j < n; j++) {scanf("%d", &m[i][j]);if (m[i][j] == -1)m[i][j] = INF;}}printf("%d\n", prim());return 0;
}

第十三章 ALDS1_12_A:Minimum Spanning Tree 最小生成树相关推荐

  1. HDU 4408 Minimum Spanning Tree 最小生成树计数

    http://acm.hdu.edu.cn/showproblem.php?pid=4408 题意:求最小生成树个数 题解:对于Kruskal算法,我们发现,最小生成树要想用多种方法就要有长度相同的边 ...

  2. HDU 4408 - Minimum Spanning Tree(最小生成树计数)

    有边权的最小生成树计数 模板 #pragma comment(linker, "/STACK:1024000000,1024000000") #include <iostre ...

  3. Minimum spanning tree HDU - 6954

    Minimum spanning tree HDU - 6954 题意: 给定n-1个点,编号从2到n,两点a和b之间的边权重为lcm(a,b).请找出它们形成的最小生成树. 2<=n<= ...

  4. Directed Minimum Spanning Tree: Chu-Liu/Edmonds Algorithm

    我们的现代数据库大作业要求实现一个图查询系统,包括基于属性的子图查询.可达性查询(可选).最短路径查询(可选).TopK最短路径查询(可选).图形化展示(可选)等功能.分成子图同构查询小组以及可达性及 ...

  5. 《Boost》Part1 Minimum Spanning Tree

    <Boost>Part1 Minimum Spanning Tree 1.Boost中的最小生成树介绍 MST最小生成树,是图论中的基本算法,还有一种是最大生成树,此处暂不介绍. 最小生成 ...

  6. CodeForces - 609E Minimum spanning tree for each edge(最小生成树+树链剖分+线段树/树上倍增)

    题目链接:点击查看 题目大意:给出一张 n 个点和 m 条边组成的无向图,现在询问包含每一条边的最小生成树 题目分析:考虑求解次小生成树的思路: 求出最小生成树 ans 枚举每一条非树边 ( u , ...

  7. 最小生成树(MST,minimum spanning tree)

    生成树:由图生成的树,由图转化为树,进一步可用对树的相关操作来对图进行操作.最小指的是权值最小: 生成树是边的集合,如下图所示的最小生成树:MST={{a,b},{a,f},{f,c}}\text{M ...

  8. 最小生成树(Minimum Spanning Tree)与最小树形图(Minimum Arborescence)问题

    没整理完 生成树:给图中指定一个特殊的点root,选择图中部分已有边生成一棵以root为根的生成树T. 最小生成树:在无向图中生成一棵树,含有的边的总权值要求是所有可能生成树中最小的,该树不唯一. 最 ...

  9. 百度之星2018资格赛t6三原色图(MST minimum spanning tree)

    ac代码: #include<bits/stdc++.h> #define per(i,a,b) for(int i=a;i<=b;i++) using namespace std; ...

最新文章

  1. Understanding Java class loading - part 2
  2. (八)python3 只需3小时带你轻松入门——List 与 dict 的常用操作
  3. pythonwrite连续写入_python文件写入write()的操作
  4. access百度翻译 get_Asp.NET调用百度翻译
  5. 企业级 SpringBoot 教程 (二)Spring Boot配置文件详解
  6. spark中dataframe解析_Spark 结构流处理介绍和入门教程
  7. Python之数据分析(numpy线性模型、线性预测、线性拟合)
  8. [网址链接]格林童话故事的原始素材
  9. 推荐4个爬虫抓包神器
  10. 国密gmtls协议-双证书体系的服务端和客户端通信代码
  11. 香港浸会大学计算机学院校友,校友反馈 | 香港浸会大学值不值得去读?
  12. 三大微分中值定理及泰勒中值定理证明
  13. php 监控网页更新提醒,web网站股票自动监控提醒实时变化
  14. Sentiment140数据集
  15. 数据结构之线性表----一文看懂顺序表、单链表、双链表、循环链表
  16. 数据采集的方法有哪些
  17. 【unity学习笔记】OnMouseEnter、OnMouseOver、OnMouseExit
  18. Spring Boot 2.x的默认日志管理与Logback配置详解
  19. 【经典算法题-10】背包问题(Knapsack Problem)
  20. php 图片合成,php原生图片合成和文字生成图片

热门文章

  1. 嵌入式开发:嵌入式软件的未来—基于平台的开发
  2. FCKeditor 的使用方法
  3. 高级语言参数传递方式_大学C语言难学?来这里教你自学C语言!高分不是梦!干货预警!!!...
  4. Navicat操作数据库时候一直显示加载中
  5. java计算机毕业设计人才招聘系统智能化管理MyBatis+系统+LW文档+源码+调试部署
  6. c++完整实现地图寻路A星算法
  7. Eigen GO Ceres
  8. java replaceall()的用法_Java replaceAll的用法
  9. 当今广域网优化的挑战和困难
  10. 1553B总线消息刷新机制