首页 > 其他分享 >考研数据结构——每日一题[最小生成树Kruskal]

考研数据结构——每日一题[最小生成树Kruskal]

时间:2023-08-11 14:04:31浏览次数:39  
标签:include const int Kruskal d% return 数据结构 find 考研

Kruskal算法 O(mlogm)

贪心按边权从小到大加入边,并查集判断点是否在集合中,不在的加入并查集



#include<iostream>
#include<algorithm>
#include<cstring>
using namespace std;

const int N = 510 	, 	M = 100010;
int n,m;

struct Edge
{
	int a,b,c; //a->b : value = c 
	bool operator< (const Edge &t)const 
	{
		return c < t.c;
	}
}e[M];
int p[N];

int find(int x)
{
	if(p[x] != x) p[x] = find(p[x]);
	return p[x];
}

int main()
{
	scanf("%d%d",&n,&m);//n个点m条边 
	for(int i = 0;i < m;i ++)
		scanf("%d%d%d",&e[i].a,&e[i].b,&e[i].c);//输入每条边
	sort(e , e + m);//先排好序按权值大小(重载小于号) [贪心思想每次选取未加入的点的最小边权] 
	
	for(int i = 1;i <= n;i++) p[i] = i;//初始化并查集,维护点的集合 
			
	int res = 0,cnt = n; //统计n个点之间的最小边权和(最小生成树)  [若不是点都联通,则不可能]
	for(int i = 0;i < m;i++)    //枚举所有边	 
	{
		int  a = e[i].a ,b = e[i].b , c =  e[i].c;//简化赋值 
		if(find(a) != find(b))//加入集合过程计算最小生成树的值 
		{
			res += c; 
			cnt --;
			p[find(a)] = find(b);
		}
	}

	if(cnt > 1) puts("impossple");//无法生成最小生成树 
	else printf("%d\n",res); 
	
	return 0;
}



标签:include,const,int,Kruskal,d%,return,数据结构,find,考研
From: https://blog.51cto.com/u_15623277/7046762

相关文章

  • 【数据结构】线段树
    例题1:给定一个正整数数列,每一个数都在添加操作:向序列后添加一个数,序列长度变成;询问操作:询问这个序列中最后程序运行的最开始,整数序列为空。一共要对整数序列进行次操作。写一个程序,读入操作的序列,并输出询问操作的答案。数据范围这道题看第一眼:暴力,再看一眼:爆炸(bushiTLE。......
  • 《VTK图形图像开发进阶》第3章VTK基本数据结构——不同类型的数据集
    ......
  • 2.0 Python 数据结构与类型
    数据类型是编程语言中的一个重要概念,它定义了数据的类型和提供了特定的操作和方法。在python中,数据类型的作用是将不同类型的数据进行分类和定义,例如数字、字符串、列表、元组、集合、字典等。这些数据类型不仅定义了数据的类型,还为数据提供了一些特定的操作和方法,例如字符串支持......
  • 《VTK图形图像开发进阶》第3章VTK基本数据结构——属性数据
    属性数据(AttributeData)是与数据集组织结构相关联的信息。3.1标量数据#include<vtkAutoInit.h>VTK_MODULE_INIT(vtkRenderingOpenGL2);VTK_MODULE_INIT(vtkRenderingFreeType);VTK_MODULE_INIT(vtkInteractionStyle);#include<vtkSmartPointer.h>#include<vtkPoint......
  • 《VTK图形图像开发进阶》第3章VTK基本数据结构——单元类型
    数据集由一个或多个单元组成。一系列有序的点按指定类型连接所定义的结构就是单元(Cell),单元是VTK可视化系统的基础。这些顺序连接的点定义了单元的拓扑结构,而点的坐标定义了单元的几何结构。如下图是类型为六面体(Hexahedron)的单元,顶点列表(由点的索引号表示,即8-10-1-6-21-22-5......
  • #yyds干货盘点# LeetCode程序员面试金典:添加与搜索单词 - 数据结构设计
    题目:请你设计一个数据结构,支持添加新单词和查找字符串是否与任何先前添加的字符串匹配。实现词典类WordDictionary:WordDictionary()初始化词典对象voidaddWord(word)将word添加到数据结构中,之后可以对它进行匹配boolsearch(word)如果数据结构中存在字符串与 word匹......
  • 数据结构与数据库选型:构建高效业务系统的关键要素
    数据结构与数据库选型:构建高效业务系统的关键要素构建高效业务系统的关键要素之一是选择合适的数据结构和数据库。下面是一些关于数据结构和数据库选型的考虑因素:1.数据结构:-选择最适合业务需求的数据结构是非常重要的。常见的数据结构包括数组、链表、栈、队列、哈希表、......
  • 【数据结构】bitset用法
    bitset用法bitset可以说是一个多位二进制数,每八位占用一个字节,因为支持基本的位运算,所以可用于状态压缩,n位bitset执行一次位运算的时间复杂度可视为n/32.输出只能用cout1.构造:inta=5;stringb="1011";charc[4]={'1','0','1','0'};bitset<10>s1(string("1001&qu......
  • Modbus的数据结构
    本文是基于modbus协议书英文原版的阅读理解,对其进行了翻译和摘取,如有不当之处,还请指出,望不吝赐教。一、基本概念明确在开始之前,首先明确一些基本概念:位:单位bit,缩写为b,最小的数据单位字节:单位bytes,缩写为B,一个字节拥有8位字:字是其用来一次性处理事务的一个固定长度的位组,其长......
  • Pandas学习挑战第三关-数据结构DataFrame
    Pandas数据结构-DataFrameDataFrame是一个表格型的数据结构,它含有一组有序的列,每列可以是不同的值类型(数值、字符串、布尔型值)。DataFrame既有行索引也有列索引,它可以被看做由Series组成的字典(共同用一个索引)。DataFrame构造方法如下:pandas.DataFrame(data,index,column......