Loading [MathJax]/jax/output/CommonHTML/config.js
前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >专栏 >LeetCode 323. 无向图中连通分量的数目(并查集)

LeetCode 323. 无向图中连通分量的数目(并查集)

作者头像
Michael阿明
发布于 2020-07-13 08:33:40
发布于 2020-07-13 08:33:40
1.8K00
代码可运行
举报
运行总次数:0
代码可运行

1. 题目

给定编号从 0 到 n-1 的 n 个节点和一个无向边列表(每条边都是一对节点),请编写一个函数来计算无向图中连通分量的数目。

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
示例 1:
输入: n = 5 和 edges = [[0, 1], [1, 2], [3, 4]]

     0          3
     |          |
     1 --- 2    4 

输出: 2

示例 2:
输入: n = 5 和 edges = [[0, 1], [1, 2], [2, 3], [3, 4]]

     0           4
     |           |
     1 --- 2 --- 3

输出:  1

注意:
你可以假设在 edges 中不会出现重复的边。
而且由于所以的边都是无向边,[0, 1][1, 0]  相同,所以它们不会同时在 edges 中出现。

来源:力扣(LeetCode) 链接:https://leetcode-cn.com/problems/number-of-connected-components-in-an-undirected-graph 著作权归领扣网络所有。商业转载请联系官方授权,非商业转载请注明出处。

2. 解题

参考:并查集

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
class dsu
{
public:
    vector<int> f;
    dsu(int n)
    {
        f = vector<int>(n);
        for(int i = 0; i < n; ++i)
            f[i] = i;
    }
    void merge(int a, int b)
    {
        int fa = find(a);
        int fb = find(b);
        f[fa] = fb;
    }
    int find(int a)
    {
        int origin = a;
        while(a != f[a])
            a = f[a];
        return f[origin] = a;
    }
    int countUni()
    {
        int count = 0;
        for(int i = 0; i < f.size(); ++i)
        {
            if(i == find(i))
                count++;
        }
        return count;
    }
};
class Solution {
public:
    int countComponents(int n, vector<vector<int>>& edges) {
        dsu u(n);
        for(auto& e : edges)
            u.merge(e[0],e[1]);
        return u.countUni();
    }
};

32 ms 10.9 MB

本文参与 腾讯云自媒体同步曝光计划,分享自作者个人站点/博客。
原始发表:2020/07/04 ,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 作者个人站点/博客 前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体同步曝光计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
暂无评论
推荐阅读
编辑精选文章
换一批
LeetCode 261. 以图判树(全部连通+边数=V-1)
给定从 0 到 n-1 标号的 n 个结点,和一个无向边列表(每条边以结点对来表示), 请编写一个函数用来判断这些边是否能够形成一个合法有效的树结构。
Michael阿明
2020/07/13
1.5K0
​LeetCode刷题实战323:无向图中连通分量的数目
算法的重要性,我就不多说了吧,想去大厂,就必须要经过基础知识和业务逻辑面试+算法面试。所以,为了提高大家的算法能力,这个公众号后续每天带大家做一道算法题,题目就从LeetCode上面选 !
程序员小猿
2021/07/29
5990
LeetCode 684. 冗余连接(并查集)
输入一个图,该图由一个有着N个节点 (节点值不重复1, 2, …, N) 的树及一条附加的边构成。附加的边的两个顶点包含在1到N中间,这条附加的边不属于树中已存在的边。
Michael阿明
2020/07/13
3970
LeetCode 1101. 彼此熟识的最早时间(排序+并查集)
在一个社交圈子当中,有 N 个人。每个人都有一个从 0 到 N-1 唯一的 id 编号。
Michael阿明
2020/07/13
9330
LeetCode 305. 岛屿数量 II(并查集)
起始的时候,每个格子的地形都被默认标记为「水」。 我们可以通过使用 addLand 进行操作,将位置 (row, col) 的「水」变成「陆地」。
Michael阿明
2020/07/13
1.4K0
LeetCode 1697. 检查边长度限制的路径是否存在(排序+并查集)
给你一个 n 个点组成的无向图边集 edgeList ,其中 edgeList[i] = [ui, vi, disi] 表示点 ui 和点 vi 之间有一条长度为 disi 的边。请注意,两个点之间可能有 超过一条边 。
Michael阿明
2021/02/19
1.2K0
LeetCode 1697. 检查边长度限制的路径是否存在(排序+并查集)
LeetCode 1489. 找到最小生成树里的关键边和伪关键边(并查集+kruskal最小生成树)
给你一个 n 个点的带权无向连通图,节点编号为 0 到 n-1 ,同时还有一个数组 edges ,其中 edges[i] = [fromi, toi, weighti] 表示在 fromi 和 toi 节点之间有一条带权无向边。
Michael阿明
2021/02/19
9920
LeetCode 1489. 找到最小生成树里的关键边和伪关键边(并查集+kruskal最小生成树)
LeetCode 685. 冗余连接 II(并查集)
在本问题中,有根树指满足以下条件的有向图。该树只有一个根节点,所有其他节点都是该根节点的后继。 每一个节点只有一个父节点,除了根节点没有父节点。
Michael阿明
2020/07/13
5320
LeetCode 685. 冗余连接 II(并查集)
LeetCode 803. 打砖块(并查集)
有一个 m x n 的二元网格,其中 1 表示砖块,0 表示空白。 砖块 稳定(不会掉落)的前提是:
Michael阿明
2021/02/19
3800
LeetCode 737. 句子相似性 II(并查集)
给定两个句子 words1, words2 (每个用字符串数组表示),和一个相似单词对的列表 pairs ,判断是否两个句子是相似的。
Michael阿明
2021/02/19
1K0
LeetCode 1258. 近义词句子(哈希+并查集+排序+回溯)
给你一个近义词表 synonyms 和一个句子 text , synonyms 表中是一些近义词对 ,你可以将句子 text 中每个单词用它的近义词来替换。
Michael阿明
2021/02/19
6400
LeetCode 1579. 保证图可完全遍历(并查集)
返回可以删除的最大边数,如果 Alice 和 Bob 无法完全遍历图,则返回 -1 。
Michael阿明
2021/02/19
2710
LeetCode 1061. 按字典序排列最小的等效字符串(并查集)
给出长度相同的两个字符串:A 和 B,其中 A[i] 和 B[i] 是一组等价字符。 举个例子,如果 A = "abc" 且 B = "cde",那么就有 'a' == 'c', 'b' == 'd', 'c' == 'e'。
Michael阿明
2020/07/13
1.6K0
LeetCode 886. 可能的二分法(着色DFS/BFS/拓展并查集)
给定一组 N 人(编号为 1, 2, …, N), 我们想把每个人分进任意大小的两组。
Michael阿明
2020/07/13
3820
LeetCode 886. 可能的二分法(着色DFS/BFS/拓展并查集)
LeetCode 2076. 处理含限制条件的好友请求(并查集)
给你一个整数 n ,表示网络上的用户数目。每个用户按从 0 到 n - 1 进行编号。
Michael阿明
2022/01/07
2460
LeetCode 1135. 最低成本联通所有城市(最小生成树+排序+并查集)
想象一下你是个城市基建规划者,地图上有 N 座城市,它们按以 1 到 N 的次序编号。
Michael阿明
2021/02/19
2.4K0
LeetCode 947. 移除最多的同行或同列石头(并查集)
1. 题目 我们将石头放置在二维平面中的一些整数坐标点上。每个坐标点上最多只能有一块石头。 每次 move 操作都会移除一块所在行或者列上有其他石头存在的石头。 请你设计一个算法,计算最多能执行多少次 move 操作? 示例 1: 输入:stones = [[0,0],[0,1],[1,0],[1,2],[2,1],[2,2]] 输出:5 示例 2: 输入:stones = [[0,0],[0,2],[1,1],[2,0],[2,2]] 输出:3 示例 3: 输入:stones = [[0,0]] 输出
Michael阿明
2020/07/13
5780
LeetCode 1319. 连通网络的操作次数(BFS/DFS/并查集)
用以太网线缆将 n 台计算机连接成一个网络,计算机的编号从 0 到 n-1。 线缆用 connections 表示,其中 connections[i] = [a, b] 连接了计算机 a 和 b。
Michael阿明
2020/07/13
6140
LeetCode 1319. 连通网络的操作次数(BFS/DFS/并查集)
LeetCode 1722. 执行交换操作后的最小汉明距离(并查集)
给你两个整数数组 source 和 target ,长度都是 n 。 还有一个数组 allowedSwaps ,其中每个 allowedSwaps[i] = [ai, bi] 表示你可以交换数组 source 中下标为 ai 和 bi(下标从 0 开始)的两个元素。 注意,你可以按 任意 顺序 多次 交换一对特定下标指向的元素。
Michael阿明
2021/02/19
6140
LeetCode 2092. 找出知晓秘密的所有专家(并查集)
给你一个整数 n ,表示有 n 个专家从 0 到 n - 1 编号。 另外给你一个下标从 0 开始的二维整数数组 meetings ,其中 meetings[i] = [xi, yi, timei] 表示专家 xi 和专家 yi 在时间 timei 要开一场会。 一个专家可以同时参加 多场会议 。最后,给你一个整数 firstPerson 。
Michael阿明
2022/01/07
4080
推荐阅读
相关推荐
LeetCode 261. 以图判树(全部连通+边数=V-1)
更多 >
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档
本文部分代码块支持一键运行,欢迎体验
本文部分代码块支持一键运行,欢迎体验