洛谷P3366 【模板】最小生成树.Prim算法

2023-05-16

 

题目:https://www.luogu.com.cn/problem/P3366

 

普利姆算法:

每次选(与已选的点相连的)最小边,循环n-1次

C语言:

#include <stdio.h>
#include <stdlib.h>
#include <string.h>

const int MaxValue = 0x7fffffff;
int n, m;
int a[5005][5005], dis[5005], vis[5005];

int min(int a, int b)
{
    if (a > b)
        return b;
    else
        return a;
}

void Prim()
{
    int i, tot = 1, min1, j, sum = 0;

    while (tot < n)
    {
        min1 = MaxValue;
        j = 0;
        for (i = 1; i <= n; i++)    //找到最小边
        {
            if (vis[i] == 0 && dis[i] < min1)
            {
                j = i;
                min1 = dis[i];
            }
        }

        if (j == 0) //不连通
        {
            printf("orz");
            return ;
        }
        tot += 1;
        vis[j] = 1;
        sum += dis[j];
        for (i = 1; i <= n; i++)
        {
            if (vis[i] == 0 && dis[i] > a[j][i])
                dis[i] = a[j][i];
        }
    }

    printf("%d", sum);
}


int main()
{
    int i, x, y, z, j;

    scanf("%d%d", &n, &m);
    memset(vis, 0, sizeof(vis));
    for (i = 1; i <= n; i++)
    {
        dis[i] = MaxValue;
        for (j = 1; j <= n; j++)
            a[i][j] = MaxValue;
    }
    for (i = 0; i < m; i++)
    {
        scanf("%d%d%d", &x, &y, &z);
        a[x][y] = min(a[x][y], z);
        a[y][x] = min(a[x][y], z);
        if (x == 1) //先选定1点
            dis[y] = min(dis[y], z);
        else if (y == 1)
            dis[x] = min(dis[x], z);
    }
    vis[1] = 1;
    Prim();

    return 0;
}

Python:

用字典类型 + 结构体数组 存储边:

定义:

class Edge():
    def __init__(self, _y, _data):
        self.y = _y
        self.data = _data

造边:

for i in range(m):
    s = input()
    x, y, z = s.split(' ')    #从x到y,长度z
    x = int(x)
    y = int(y)
    z = int(z)
    if x in edg.keys():    #x中是否已有数
        a = edg[x]    #有
    else:
        a = []    #无则创造列表
    a.append(Edge(y, z))    
    edg[x] = a    

 

代码:

class Edge():
    def __init__(self, _y, _data):
        self.y = _y
        self.data = _data


s = input()
n, m = s.split(' ')
n = int(n)
m = int(m)
edg = {}
dis = [0x7fffffff for i in range(n + 5)]
vis = [0 for i in range(n + 5)]
for i in range(m):
    s = input()
    x, y, z = s.split(' ')
    x = int(x)
    y = int(y)
    z = int(z)
    if x in edg.keys():
        a = edg[x]
    else:
        a = []
    a.append(Edge(y, z))
    edg[x] = a
    if y in edg.keys():
        a = edg[y]
    else:
        a = []
    a.append(Edge(x, z))
    edg[y] = a
    if x == 1:
        dis[y] = min(dis[y], z)
    elif y == 1:
        dis[x] = min(dis[x], z)

tot = 1
vis[1] = 1
ans = 0
while tot < n:
    min1 = 0x7fffffff
    j = 0
    for i in range(1, n + 1):
        if dis[i] < min1 and vis[i] == 0:
            j = i
            min1 = dis[i]
    if j == 0:
        print("orz")
        exit(0)
    vis[j] = 1
    tot += 1
    ans += dis[j]
    for i in edg[j]:
        if i.data < dis[i.y] and vis[i.y] == 0:
            dis[i.y] = i.data
print(ans)

 

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

洛谷P3366 【模板】最小生成树.Prim算法 的相关文章

  • 洛谷——P3366 【模板】最小生成树

    题目描述 如题 xff0c 给出一个无向图 xff0c 求出最小生成树 xff0c 如果该图不连通 xff0c 则输出orz 输入格式 xff1a 第一行包含两个整数N M xff0c 表示该图共有N个结点和M条无向边 xff08 N lt
  • 最小生成树 Kruskal算法 Prim算法 洛谷P3366

    最小生成树 Kruskal算法 Prim算法 洛谷P3366 相较于Prim算法 xff0c 我觉得Kruskal算法更优 xff08 因为一般情况 xff0c 题目给你的边数都是正常的 xff0c Kruskal算法的时间复杂度为O El
  • 最小生成树 prim算法(附代码)

    prim算法是以一个根节点开始慢慢往下延伸 xff0c 不断寻找距生成树最短的距离的节点 xff0c 然后将该节点纳入生成树的集合中 xff0c 然后再将该节点影响的其他未纳入生成树节点的距离更新 xff08 缩小与生成树的距离 xff09
  • 洛谷 P3366 【模板】最小生成树 (题解+代码)

    题目传送门 xff1a https www luogu com cn problem P3366 题解 xff1a 利用Kruskal算法求解 xff0c 这里大致说下Kruskal算法 对于一个点数为n的生成树而言 很显然 xff0c 想
  • 洛谷P3366 【模板】最小生成树.Prim算法

    题目 xff1a https www luogu com cn problem P3366 普利姆算法 xff1a 每次选 与已选的点相连的 最小边 循环n 1次 C语言 xff1a include lt stdio h gt includ
  • LOJ #10066. 「一本通 3.1 练习 1」新的开始(最小生成树 虚拟节点)

    题目链接 题目描述 发展采矿业当然首先得有矿井 xff0c 小 FF 花了上次探险获得的千分之一的财富请人在岛上挖了 n口矿井 xff0c 但他似乎忘记考虑的矿井供电问题 为了保证电力的供应 xff0c 小 FF 想到了两种办法 xff1a
  • 【洛谷 3366】最小生成树_Prim

    题目描述 如题 xff0c 给出一个无向图 xff0c 求出最小生成树 xff0c 如果该图不连通 xff0c 则输出orz 输入格式 第一行包含两个整数N M xff0c 表示该图共有N个结点和M条无向边 xff08 N lt 61 50
  • 洛谷-U132410-最小代价(最小生成树(森林)+ 虚拟点)

    题目描述 xff1a 点击进入 思路 最小生成树的变形 我们虚拟一个 零 结点 xff0c 这个结点跟每个村庄 i 连边 xff0c 权值分别为在村庄 i 建立一个网络中心的花费 然后其他边都正常连 xff0c 最后求最小生成树即可 代码
  • 洛谷P3366最小生成树模板

    kruskal span class token macro property span class token directive keyword include span span class token string lt cstdi
  • 最小生成树算法总结【洛谷P3366】

    一 Prim算法 Prim算法是一种以点集为出发点的最小生成树算法 xff0c 它将无向图G中所有顶点V分成两个子集A B 初始时 xff0c A中只包含一个随机选取的顶点u xff0c 其余顶点属于集合B 每次从集合B中选取一个顶点加入顶
  • 洛谷 P3366 【模板】最小生成树

    题目描述 如题 xff0c 给出一个无向图 xff0c 求出最小生成树 xff0c 如果该图不连通 xff0c 则输出orz 输入输出格式 输入格式 xff1a 第一行包含两个整数N M xff0c 表示该图共有N个结点和M条无向边 xff
  • 最小生成树的权值之和-Prim算法

    问题描述 已知含有n个顶点的带权连通无向图 采用邻接矩阵存储 邻接矩阵以三元组的形式给出 只给出不包括主对角线元素在内的下三角形部分的元素 且不包括不相邻的顶点对 请采用Prim算法 求该连通图从1号顶点出发的最小生成树的权值之和 输入形式
  • 数据结构:最小生成树--Prim算法

    最小生成树 Prim算法 最小生成树 给定一无向带权图 顶点数是n 要使图连通只需n 1条边 若这n 1条边的权值和最小 则称有这n个顶点和n 1条边构成了图的最小生成树 minimum cost spanning tree Prim算法
  • P1195 口袋的天空(Kruskal&&并查集&&最小连通块个数)

    口袋的天空 洛谷 解析 这题同 1487北极通讯网络 Kruskal 一样 都是求最小连通块的代价 跑一边Kruskal 然后统计连通块 1487北极通讯网络 Kruskal 陈进士学习的博客 CSDN博客 include
  • 【算法学习笔记】24:Prim算法与Kruskal算法(最小生成树)

    Prim算法和Dijkstra算法很相似 而且也按照是不是稀疏图分成了两种 对于稠密图 用朴素版的Prim算法 时间复杂度 O n 2 O n 2
  • 最小生成树笔记(Prim算法&&Kruskal算法)

    1 最小生成树 最小生成树 Minimum Spanning Tree 简称MST 是指 在一个连通无向图中 找到一个包含所有顶点的树 且该树的所有边的权重之和最小 换句话说 最小生成树是原图中的一个子图 它包含所有顶点 并且连接所有顶点的
  • tree【WQS二分+MST】

    题目链接 洛谷 精确涉及到了WQS二分 BZOJ 2654 不推荐 个人不推荐做BZOJ2654的这道题 因为那道题可以水过去 不用WQS二分也是可以的 可以直接二分答案 显然是没有这个好的 先在这里讲一下什么是WQS二分吧 也是从网上看来
  • 数据结构——普里姆(Prim)算法

    普里姆算法 Prim算法 图论中的一种算法 可在加权连通图里搜索最小生成树 意即由此算法搜索到的边子集所构成的树中 不但包括了连通图里的所有顶点 且其所有边的权值之和亦为最小 以下是数据结构中关于普里姆算法的操作 编程风格参考严蔚敏版数据结
  • prim算法解决最小生成树问题

    刚好这次又遇到了prim算法 就做了下整理 可以参考 数据结构与算法分析c 描述 这本书 个人而言 很经典 并把以前写的代码也整理了一下 做下分享 同时也加深下自己的理解 prim算法是解决最小生成树问题的一个很好的算法 此算法是是将点集合
  • Prim算法解决修路问题

    普里姆算法 Prim算法 图论中的一种算法 可在加权连通图里搜索最小生成树 意即由此算法搜索到的边子集所构成的树中 不但包括了连通图里的所有顶点 英语 Vertex graph theory 且其所有边的权值之和亦为最小 普里姆算法和Kru

随机推荐

  • 计算机类期刊投稿心得

    1 杂志名称 计算机应用研究 成都 杂志文章包含专业 建模 xff0c 仿真 xff0c 网络 xff0c 人工智能 xff0c 比较杂 投稿联系方式 注册在线投稿审稿 投稿费用 审稿费无 xff0c 250元 页 杂志级别 国家一级期刊
  • 《物流配送中VRP问题的多目标优化方法研究》个人小结

    物流配送中VRP问题的多目标优化方法研究 个人小结 物流配送中VRP问题的多目标研究方法 xff0c 自从去年开始了这项大学生创新创业 xff0c 就一直围绕在我的身边 xff0c 时时刻刻会想着她 xff0c 尽可能地去多学一点相关的VR
  • 《科研方法导论》

    科研方法导论 这本书在开学的时候听说有这门课要上就在网上下单了 xff0c 目前已将近一整个学期过去了 xff0c 距离老师的最后一次课也有好几个月了 xff0c 才新建一份Word文档准备将老师上课所讲述的知识和这本书的整体内容进行读后感
  • 语义计算的递归下降(预测)翻译程序

    语义计算的递归下降 xff08 预测 xff09 翻译程序 一 实验内容 实现属性文法的递归下降翻译程序 xff27 xff3b xff2e xff3d xff1a N gt S S f 61 1 print S v S gt BS1 S1
  • MyDockFinder Steam版的新增功能和下载

    文末附下载链接 1 增加两个新的开机启动方式 xff0c 分别是注册表和计划任务 xff0c 防止开机不能启动问题 xff0c 下面解释一下三种开机启动方式的区别和功能 注册表 xff1a 速度最慢 但是启动稳定几乎没有开机不能启动的情况
  • Mysql报错:Your password has expired. To log in

    https stackoverflow com questions 33387879 mysql password expired cant connect MySQL password expiry Resetting the passw
  • go语言string、int、int64互相转换

    string到int int err 61 strconv Atoi string string到int64 int64 err 61 strconv ParseInt string 10 64 int到string string 61 s
  • 直播解决方案/sdk的选择

    直播App xff1a 趣拍微视频云服务 七牛云 金山云 乐视云 网易云信 VTC云通信 gensee zego im Tusdk 大牛直播 美丽播 云豹直播 易直播 一直播 微议 2B指的是为企业提供直播服务 例如微吼 目睹直播 易直播
  • vue示例及优秀案例

    完整的示例 xff1a https auth0 com blog build an app with vuejs 非常棒的概览 xff1a https scotch io tutorials build a single page time
  • [微信开发]invalid credential, access_token is invalid or not latest hint

    正解 这种情况跟这个库没有直接关系 请检查一下是否有别的地方同时请求了access token xff0c 导致微信服务器发放了新的access token给别人 尤其是dev环境 正解 查了好久 xff0c 先发现下载到本地的文件size
  • vmware7.1汉化中文版下载地址+序列号!

    http hi baidu com aking roc blog item 54e81f5977780e8c810a1825 html vmware7 1汉化中文版序列号 43 注册机下载 vmware7 1汉化中文版序列号 43 注册机下
  • android编译错误FCM

    android编译报错 ed vendor manifest xml 34 Error The following instances are in the device manifest but not specified in fram
  • C++“读取位置 0x****** 时发生访问冲突”的可能原因

    这种错误的意思一般是指访问了不属于自己的内存空间 xff0c 出现这种错误有几种原因 xff1a 1 给一个数组分配了比较小的内存空间 xff0c 然后又给该数组赋了一个比较大的值 xff0c 举例说明 xff1a Cpp代码 char b
  • Ubuntu中SVN客户端安装+使用

    1 安装 svn客户端 xff1a apt get install subversion xff0c 然后根据提示一步一步 xff0c 就完成了 svn的安装 当然 xff0c 也可以源码安装 svn xff0c 下载 subversion
  • 转--如何解决connection reset by peer(参考使用)

    转 如何解决connection reset by peer xff08 参考使用 xff09 2010 04 28 19 33 录制c s结构下的winsocket通信 xff0c 在vuser ini中创建连接 xff08 lrs cr
  • <ubuntu 无线网络已禁用 wireless is disabled>解决办法

    2012 5 23 问题描述 xff1a 无线开关怎么开关都启动不了 xff0c 显示无线网络已禁用 有线ok 激活系统 gt 附加驱动 gt Broadcom STA 无线驱动 xff08 和Nvidia图形加速驱动一起 xff09 即可
  • golang map并发读写

    对应报错 xff1a fatal error concurrent map writes fatal error concurrent map read and map write https wrfly kfd me posts read
  • /run/udev/data 磁盘满

    临时办法 xff1a https groups google com forum m topic nomad tool 6L6QbL6QzY4 I 39 ve run 39 udevadm info cleanup db 39 which
  • 证件照蓝底变白底的方法

    P一寸照片时研究的这个方法 比抠图简单 xff0c 对头发的处理还比较好 的一种方法 xff0c 所以拿出来和大家分享一下
  • 洛谷P3366 【模板】最小生成树.Prim算法

    题目 xff1a https www luogu com cn problem P3366 普利姆算法 xff1a 每次选 与已选的点相连的 最小边 循环n 1次 C语言 xff1a include lt stdio h gt includ