并查集 先定义

int f[10100];//定义祖先 

之后初始化

for(int i=1;i<=n;++i)
f[i]=i; //初始化

下面为并查集操作

int find(int x)//int 类型 查找
{
return f[x]==x?f[x]:f[x]=find(f[x]);//三目运算符查找
//如果f[x]==x 返回f[x] 否则返回f[x]=find(f[x]);
}
void unionn(int a,int b)//void 类型 连接
{
a=find(a),b=find(b);//查找两点的祖先,覆盖
f[b]=a;//更改祖先,连接两点
}

kruskal算法就是运用了并查集,但它真正耗时的地方是sort 排序

代码

 1 #include<bits/stdc++.h>
2 using namespace std;
3 struct edge
4 {
5 int u,v,w;//u起点 v 终点 w 边权 因为要排序,所以不需要nxt
6 bool operator <(const edge b) const//重载运算符,用于sort(可能更快,不确定),不会,百度搜搜
7 {
8 return w<b.w;//小的在前
9 }
10 };
11 edge e[100010];//建边
12 int f[110];//记录每个点的祖先
13 int n,k,cnt,total,cot;//n 点数 k 关系数 cnt,cot 计数器 total 记录最小生成树的边权和
14 void add(int,int,int);//加边函数声明
15 int find(int);//并查集查找函数声明
16 void unionn(int,int);//并查集合并函数声明
17 int main()
18 {
19 scanf("%d%d",&n,&k);
20 for(int i=1;i<=n;++i) f[i]=i;//初始化
21 for(int u,v,w,i=1;i<=k;++i)
22 {
23 scanf("%d%d%d",&u,&v,&w);
24 add(u,v,w);//加边
25 add(v,u,w);//加边 无向图
26 }
27 sort(e+1,e+cnt+1);//排序 重载运算符排序
28 for(int i=1;i<=cnt;++i)//根据边权从小到大找边判断
29 {
30 int u=e[i].u,v=e[i].v,w=e[i].w;
31 if(find(u)!=find(v))//判断两点是否连接
32 {
33 total+=w;//记录边权和
34 unionn(u,v);//连接,避免后面循环误判
35 cot++;//记录找了几条边
36 }
37 if(cot==n-1) break;//找到n-1条边就退出
38 }
39 printf("%d",total);//输出
40 return 0;//结束
41 }
42 void add(int u,int v,int w)//建边
43 {
44 e[++cnt].u=u;
45 e[cnt].v=v;
46 e[cnt].w=w;
47 }
48 int find(int x)
49 {
50 return f[x]==x?f[x]:f[x]=find(f[x]);//三目运算符查找
51 }
52 void unionn(int a,int b)
53 {
54 a=find(a),b=find(b);
55 if(a!=b) f[b]=a;//加这个判断,有些题会在这里“做文章”
56 }

并查集和kruskal最小生成树算法的更多相关文章

  1. Kruskal 最小生成树算法

    对于一个给定的连通的无向图 G = (V, E),希望找到一个无回路的子集 T,T 是 E 的子集,它连接了所有的顶点,且其权值之和为最小. 因为 T 无回路且连接所有的顶点,所以它必然是一棵树,称为 ...

  2. [算法系列之二十七]Kruskal最小生成树算法

    简单介绍 求最小生成树一共同拥有两种算法,一个是就是本文所说的Kruskal算法,还有一个就是Prime算法. 在具体解说Kruskal最小生成树算法之前,让我们先回想一下什么是最小生成树. 我们有一 ...

  3. [算法] kruskal最小生成树算法

    #include <stdio.h> #include <stdlib.h> #define MAX 100 int N, M; struct Edge { int u,v; ...

  4. poj1861 network(并查集+kruskal最小生成树

    题目地址:http://poj.org/problem?id=1861 题意:输入点数n和边数n,m组边(点a,点b,a到b的权值).要求单条边权值的最大值最小,其他无所谓(所以多解:(.输出单条边最 ...

  5. 贪心算法(2)-Kruskal最小生成树

    什么是最小生成树? 生成树是相对图来说的,一个图的生成树是一个树并把图的所有顶点连接在一起.一个图可以有许多不同的生成树.一个有 n 个结点的连通图的生成树是原图的极小连通子图,且包含原图中的所有 n ...

  6. LeetCode刷题总结-排序、并查集和图篇

    本文介绍LeetCode上有关排序.并查集和图的算法题,推荐刷题总数为15道.具体考点分析如下图: 一.排序 1.数组问题 题号:164. 最大间距,难度困难 题号:324. 摆动排序 II,难度中等 ...

  7. 最小生成树算法(Prim,Kruskal)

    边赋以权值的图称为网或带权图,带权图的生成树也是带权的,生成树T各边的权值总和称为该树的权. 最小生成树(MST):权值最小的生成树. 生成树和最小生成树的应用:要连通n个城市需要n-1条边线路.可以 ...

  8. 无向带权图的最小生成树算法——Prim及Kruskal算法思路

    边赋以权值的图称为网或带权图,带权图的生成树也是带权的,生成树T各边的权值总和称为该树的权. 最小生成树(MST):权值最小的生成树. 生成树和最小生成树的应用:要连通n个城市需要n-1条边线路.可以 ...

  9. 最小生成树之克鲁斯卡尔(Kruskal)算法

    学习最小生成树算法之前我们先来了解下 下面这些概念: 树(Tree):如果一个无向连通图中不存在回路,则这种图称为树. 生成树 (Spanning Tree):无向连通图G的一个子图如果是一颗包含G的 ...

随机推荐

  1. Android8.0 后台服务保活的一种思路

    原文地址:Android8.0 后台服务保活的一种思路 | Stars-One的杂货小窝 项目中有个MQ服务,需要一直连着,接收到消息会发送语音,且手机要在锁屏也要实现此功能 目前是使用广播机制实现, ...

  2. Java 17中对switch的模式匹配增强

    还记得Java 16中的instanceof增强 吗? 通过下面这个例子再回忆一下: Map<String, Object> data = new HashMap<>(); d ...

  3. ansible模块的介绍与使用

    ansible-doc的使用 1.ansible-doc -h可以看见ansible-doc的所有参数 2.ansible-doc 命令格式:ansible-doc [-l|-F|-s] [optio ...

  4. python二分法、牛顿法求根

    二分法求根 思路:对于一个连续函数,左值f(a)*右值f(b)如果<0,那么在这个区间内[a,b]必存在一个c使得f(c)=0 那么思路便是取中间点,分成两段区间,然后对这两段区间分别再比较,跳 ...

  5. [java并发编程]基于信号量semaphore实现限流器

    目录 一.什么是信号量 二.信号量类Semaphore 三.实现限流器 欢迎关注我的博客,更多精品知识合集 一.什么是信号量 "信号量"在编程术语中使用单词semaphore,那什 ...

  6. git clone指定分支

    技术背景 Git是代码版本最常用的管理工具,此前也写过一篇介绍Git的基本使用的博客,而本文介绍一个可能在特定场景下能够用到的功能--直接拉取指定分支的内容. Git Clone 首先看一下如果我们按 ...

  7. 4.0 vue绑定dom属性和函数的方法

    <!DOCTYPE html> <html> <head> <meta charset="UTF-8"> <title> ...

  8. 好客租房53-context的使用

    app组件要传递给child组件 该如何处理 更好的姿势 跨组件传递数据 Provider 用来提供数据 Consumer用来消费数据 1调用React.createContext() 创建provi ...

  9. 专家PID控制仿真学习

    目录 专家控制 专家系统 专家控制 学习笔记,用于记录学习 资料:<智能控制>(第四版)--刘金琨 专家系统 一.专家系统的定义 专家系统是一类包含知识和推理的智能计算机程序,其内部包含某 ...

  10. Jmeter基础入门应用举例

    举例当然应该有接口下面以常用的百度搜索接口为例: 1.接口地址: http://www.baidu.com/s?ie=utf-8&wd=jmeter性能测试 2.请求参数 ie:编码方式,默认 ...