【洛谷 3366】最小生成树_Prim

2023-05-16

 

题目描述

如题,给出一个无向图,求出最小生成树,如果该图不连通,则输出orz

输入格式

第一行包含两个整数N、M,表示该图共有N个结点和M条无向边。(N<=5000,M<=200000)

接下来M行每行包含三个整数Xi、Yi、Zi,表示有一条长度为Zi的无向边连接结点Xi、Yi

输出格式

输出包含一个数,即最小生成树的各边的长度之和;如果该图不连通则输出orz

输入输出样例

输入 #1复制

4 5
1 2 2
1 3 2
1 4 3
2 3 4
3 4 3  
输出 #1复制

7  

说明/提示

时空限制:1000ms,128M

数据规模:

对于20%的数据:N<=5,M<=20

对于40%的数据:N<=50,M<=2500

对于70%的数据:N<=500,M<=10000

对于100%的数据:N<=5000,M<=200000

样例解释:

所以最小生成树的总边权为2+2+3=7

 

 

题解:Prim算法。分成两个组,在集合里和不在集合里。

然后每次寻找连接两个集合的最近路径,加上即可。类似于Dijkstra


#include<iostream>
#include<algorithm>
#include<queue>
#include<cmath>
#include<cstring>
#include<cstdlib>
#include<cstdio>
using namespace std;
const int N=400005;
const int oo=0x3f3f3f3f;
struct node{
    int v,w,next;
}e[N];
int head[N],dis[N],cnt,n,m;
int vis[N],x,y,z,ans;
void add(int u,int v,int w){
    cnt++;
    e[cnt].v=v;
    e[cnt].w=w;
    e[cnt].next=head[u];
    head[u]=cnt;
}

void boom_JJJ(){
    scanf("%d %d",&n,&m);
    for(int i=1;i<=m;i++){
        scanf("%d %d %d",&x,&y,&z);
        add(x,y,z); add(y,x,z);
    }
    for(int i=1;i<=n;i++)
        dis[i]=oo;
}
void Yao_Chen_Lai_Le(){
    dis[1]=0;
    //for(int i=2;i<=n;i++)
    //    dis[i]=oo;
    for(int i=head[1];i;i=e[i].next)
        dis[e[i].v]=min(dis[e[i].v],e[i].w);
    
    int cxk=n-1,now=1;
    while(cxk--){
        int mn=oo;
        vis[now]=1;
        for(int i=1;i<=n;i++)
            if(!vis[i] && mn>dis[i])
               { mn=dis[i]; now=i; }
        ans+=mn;
        for(int i=head[now];i;i=e[i].next){
            int sv=e[i].v;
            if(dis[sv]>e[i].w && !vis[sv])
               dis[sv]=e[i].w;
        }    
    }
}
int main(){
    freopen("p3366.in","r",stdin);
    freopen("p3366.out","w",stdout);
    boom_JJJ();
    Yao_Chen_Lai_Le();
    printf("%d",ans);
    return 0;
}  

 

转载于:https://www.cnblogs.com/wuhu-JJJ/p/11289628.html

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

【洛谷 3366】最小生成树_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
  • 洛谷 P3366 【模板】最小生成树

    洛谷 P3366 模板 最小生成树 题目 给出一个无向图 xff0c 求出最小生成树 xff0c 如果该图不连通 xff0c 则输出orz 题目链接 模板 最小生成树 洛谷 输入 第一行包含两个整数N M xff0c 表示该图共有N个结点和
  • 最小生成树 prim算法(附代码)

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

    扩散 题目描述 一个点每过一个单位时间就会向四个方向扩散一个距离 xff0c 如图 图略 两个点a b连通 xff0c 记作e a b 当且仅当a b的扩散区域有公共部分 连通块的定义是块内的任意两个点u v都必定存在路径e u a0 e
  • 洛谷 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
  • 洛谷-U132410-最小代价(最小生成树(森林)+ 虚拟点)

    题目描述 xff1a 点击进入 思路 最小生成树的变形 我们虚拟一个 零 结点 xff0c 这个结点跟每个村庄 i 连边 xff0c 权值分别为在村庄 i 建立一个网络中心的花费 然后其他边都正常连 xff0c 最后求最小生成树即可 代码
  • 洛谷 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
  • 最小生成树之普里姆(Prim)算法和克鲁斯卡尔(Kruskal)算法

    作者 STzen 链接 https www jianshu com p 683ffde4f3a3 来源 简书 最小生成树 列子引入 如图假设v0到v8表示9个村庄 现在需要在这9个村庄假设通信网络 村庄之间的数字代表村庄之间的直线距离 求用
  • 【算法学习笔记】24:Prim算法与Kruskal算法(最小生成树)

    Prim算法和Dijkstra算法很相似 而且也按照是不是稀疏图分成了两种 对于稠密图 用朴素版的Prim算法 时间复杂度 O n 2 O n 2
  • POJ1785

    prim算法求最小生成树 1 输入 一个加权连通图 其中顶点集合为V 边集合为E 2 初始化 V new x 其中x为集合V中的任一节点 起始点 E new 为空 3 重复下列操作 直到V new V a 在集合E中选取权值最小的边
  • 最小生成树笔记(Prim算法&&Kruskal算法)

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

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

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

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

随机推荐

  • 刷机未知错误6_《逃离塔科夫》0.12.6更新“Unknown Error”解决办法

    逃离塔科夫 2020年5月28日进行了删档更新 xff0c 迎来0 12 6全新版本 xff0c 虽然是删档 xff0c 但会保留物品检视进度和武器预设 如果各位在更新时遇到 Unknown Error 未知错误提示 xff0c 可以用以下
  • linux java jar 失败,Linux jar错误解决方法

    Java程序在windows下正常 xff0c 在Linux下却报jar错 cannot read zip file entry 或者 添加jar包后 xff0c 项目启动时报错 xff1a java util zip ZipExcepti
  • 视频教程-C++多线程编程视频教程(C++11多线程并发)-C/C++

    C 43 43 多线程编程视频教程 xff08 C 43 43 11多线程并发 xff09 黄强老师 xff0c 国家软件设计师 xff0c 软件开发工程师 xff0c 项目经理 产品经理 培训讲师 创业合伙人 xff0c 多年C C 43
  • 【Luogu P1661】扩散

    题目 xff1a 一个点每过一个单位时间就会向四个方向扩散一个距离 xff0c 如图 两个点 a b 连通 xff0c 记作 e a b 当且仅当 a b 的扩散区域有公共部分 连通块的定义是块内的任意两个点 u v 都必定存在路径 e u
  • Linux让Apache支持中文URL图片/文件名

    需要用到iconv hook和mod encoding Apache xff08 32位 xff09 xff1a 安装环境 xff1a CentOS 5 6 43 Apache 2 2 15 xff08 Apache2 4同样适用 xff0
  • 解决VS2015安装后stdio.h ucrtd.lib等文件无法识别问题,即include+lib环境变量配置

    转载自 xff1a http blog csdn net carl qi article details 51171280 今天突然想在windows上装个 VS2015 玩玩 xff0c 结果遇到了如下bug xff1a 安装完 VS20
  • 算法基础复习-动态规划

    1 动态规划 xff08 Dynamic Programming xff0c DP xff09 动态规划通常用来求解复杂问题的某个最优解 xff0c 与分治法相似 xff0c 区别在于 分治法应用于子问题互不相交的情况 xff0c 即递归的
  • 数据结构|-常见数据结构整理

    归纳总结了一下数据机构的常用类型 xff0c 个人理解常用的数据机构可以分为线性表 栈 队列 树 xff0c 线性表包括顺序表和链表 xff0c 栈和队列应当属于特殊的线性表 xff0c 有几个概念和误区需要先说一下 顺序表和线性表的关系
  • Xcode5 创建模板和UIView 关联XIB

    来源 xff1a http www cnblogs com china ldw p 3533896 html 在做ios应用开发的过程 xff0c 难免遇到要创建 子view 和 自定义view的时候 xff0c 归根到底 xff0c 我们
  • opencv中矩阵计算的一些函数

    转自 xff1a http blog sina com cn s blog 7908e1290101i97z html 综述 OpenCV有针对矩阵操作的C语言函数 许多其他方法提供了更加方便的C 43 43 接口 xff0c 其效率与Op
  • mysql中对比 JSON_VALUE 与 JSON_QUERY

    1 JSON概述 MySQL里的json分为json array和json object 表示整个json对象 xff0c 在索引数据时用下标 对于json array xff0c 从0开始 或键值 对于json object xff0c
  • Win10系统的Microsoft Edge浏览器打开任一网页均未响应卡死的问题

    Edge浏览器在刚装上WIN10的时候就使用了 xff0c 的确给人耳目一新 xff0c 使用起来也非常顺心的感觉 xff0c 总体上还是很感人的 xff0c 可是今天使用突然出现随便打开一个网页都会卡死 xff0c 未响应的问题 xff0
  • 用二进制方法求两个整数的最大公约数(GCD)

    二进制GCD算法基本原理是 先用移位的方式对两个数除2 xff0c 直到两个数不同时为偶数 然后将剩下的偶数 xff08 如果有的话 xff09 做同样的操作 xff0c 这样做的原因是如果u和v中u为偶数 v为奇数 xff0c 则有gcd
  • SQL SERVER解析Json

    外包的项目 xff0c 有很多信息存储在JSON中 xff0c 无论是查询还是修改信息都十分麻烦 找了一些实用的SQL Function去解析 xff0c 并附修改例子 使用过程 xff1a 1 需要在SQL新建自定义类型 table Hi
  • c++ 头文件循环引用解法

    A h include 34 B h 34 class A public B m b B h include 34 A h 34 class B public A m a 上面这样是编译不过的 xff0c 把A h中的 include 34
  • 搭建ceph集群(单节点)

    https blog csdn net Greenchess article details 77525786 软件环境 xff1a Centos7 x64 CEPH版本 xff1a ceph deploy v1 5 37 ceph ver
  • Java-SpringCloud-基础

    一 服务注册与发现 服务注册 xff1a 服务提供者将服务的信息 xff08 IP 端口 协议等 xff09 登记到注册中心服务发现 xff1a 服务消费者根据一定策略从注册中心的服务列表选取一个服务 1 eureka span class
  • Ubuntu休眠不能唤醒问题之分区惹的祸

    问题描述 xff1a 休眠后进行唤醒时一直黑屏或内核错误 经历如下 xff1a 在笔记本上添加了固态硬盘后直接将机械硬盘上的系统拷贝到固态盘中使用 xff0c 设置了swap分区 xff0c 在唤醒时内核报告ext4文件系统错误 在lily
  • 用Keil-MDK开发TQ2440裸机程序入门教程——LED流水灯实现

    觉得此编文章很详实 xff0c 故转载之 xff0c 来自http www amobbs com thread 5281512 1 1 html 开发板也差不多买了半年了 以前照着教程用的是软件是ADS 在win7下老是崩溃 后来才知道AD
  • 【洛谷 3366】最小生成树_Prim

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