leetcode-1319:连通网络的操作次数

  • 题目
  • 解题
    • 方法一:并查集

题目

题目连接

用以太网线缆将 n 台计算机连接成一个网络,计算机的编号从 0 到 n-1。线缆用 connections 表示,其中 connections[i] = [a, b] 连接了计算机 a 和 b。

网络中的任何一台计算机都可以通过网络直接或者间接访问同一个网络中其他任意一台计算机。

给你这个计算机网络的初始布线 connections,你可以拔开任意两台直连计算机之间的线缆,并用它连接一对未直连的计算机。请你计算并返回使所有计算机都连通所需的最少操作次数。如果不可能,则返回 -1 。

示例 1:

输入:n = 4, connections = [[0,1],[0,2],[1,2]]
输出:1
解释:拔下计算机 1 和 2 之间的线缆,并将它插到计算机 1 和 3 上。

示例 2:

输入:n = 6, connections = [[0,1],[0,2],[0,3],[1,2],[1,3]]
输出:2

示例 3:

输入:n = 6, connections = [[0,1],[0,2],[0,3],[1,2]]
输出:-1
解释:线缆数量不足。

示例 4:

输入:n = 5, connections = [[0,1],[0,2],[3,4],[2,3]]
输出:0

解题

方法一:并查集

  • 比如有n台电脑,如果连接线数小于n-1,那么一定是没法成功的。
    如果连线数大于等于n-1,那么一定可以通过一定的修改,以此来修改成功

  • 由于连接数大于等于n-1则一定可以修改成功,那么可以使用并查集,得到最后剩下的集合个数m,那么最后需要修改的,就需要m-1根即可。

class UnionFind{private:vector<int> parent;int setNum;
public:UnionFind(int n){parent.resize(n);iota(parent.begin(),parent.end(),0);setNum=n;}int find(int index){if(parent[index]==index) return index;return parent[index]=find(parent[index]);}void unite(int index1,int index2){int p1=find(index1);int p2=find(index2);if(p1!=p2){parent[p1]=p2;setNum--;}}int getSetNum(){return setNum;}
};class Solution {public:int makeConnected(int n, vector<vector<int>>& connections) {if(connections.size()<n-1) return -1;//n台电脑,至少需要n-1条线,否则不可能成功UnionFind uf(n);for(vector<int>& conn:connections){uf.unite(conn[0],conn[1]);}return uf.getSetNum()-1;//如果还剩下m个集合,那么修改m-1条线}
};

leetcode-1319:连通网络的操作次数相关推荐

  1. LeetCode 1319. 连通网络的操作次数(BFS/DFS/并查集)

    文章目录 1. 题目 2. 解题 2.1 BFS 2.2 DFS 2.3 并查集 1. 题目 用以太网线缆将 n 台计算机连接成一个网络,计算机的编号从 0 到 n-1. 线缆用 connection ...

  2. leetcode —— 1319. 连通网络的操作次数

    用以太网线缆将 n 台计算机连接成一个网络,计算机的编号从 0 到 n-1.线缆用 connections 表示,其中 connections[i] = [a, b] 连接了计算机 a 和 b. 网络 ...

  3. leetcode 1319. 连通网络的操作次数(并查集)

    用以太网线缆将 n 台计算机连接成一个网络,计算机的编号从 0 到 n-1.线缆用 connections 表示,其中 connections[i] = [a, b] 连接了计算机 a 和 b. 网络 ...

  4. 【每日一题】 1319. 连通网络的操作次数

    [每日一题] 1319. 连通网络的操作次数 避免每日太过咸鱼,一天搞定一道LeetCode算法题 一.题目描述 用以太网线缆将 n 台计算机连接成一个网络,计算机的编号从 0 到 n-1.线缆用 c ...

  5. 1319. 连通网络的操作次数

    链接:1319. 连通网络的操作次数 题解: 1.图的bfs遍历 class Solution {public:void bfs(std::unordered_map<int, std::vec ...

  6. 【力扣】1319. 连通网络的操作次数

    以下为力扣官方题解 1319. 连通网络的操作次数 题目 示例1 示例2 示例3 示例4 提示 官方题解 思路一 深度优先搜索 代码 复杂度分析 思路二 并查集 代码 复杂度分析 题目 用以太网线缆将 ...

  7. leetcode1319. 连通网络的操作次数

    leetcode1319. 连通网络的操作次数 题目描述 链接: leetcode1319. 用以太网线缆将n台计算机连接成一个网络,计算机的编号从0到n-1.线缆用connections表示,其中c ...

  8. 【数据结构与算法】之连通网络的操作次数的算法

    一.题目要求 用以太网线缆将 n 台计算机连接成一个网络,计算机的编号从 0 到 n-1.线缆用 connections 表示,其中 connections[i] = [a, b] 连接了计算机 a ...

  9. leetcode1319. 连通网络的操作次数(并查集)

    用以太网线缆将 n 台计算机连接成一个网络,计算机的编号从 0 到 n-1.线缆用 connections 表示,其中 connections[i] = [a, b] 连接了计算机 a 和 b. 网络 ...

最新文章

  1. java 蓝牙4.0_《蓝牙4.0 BLE开发完全手册---物联网开发技术实战
  2. 十个必备的.NET开发小工具(1):Snippet Compiler
  3. linux编译c++ 静态库,C/C++ 条件编译静态库
  4. hibernate 程序运行时的错误,及解决办法(不定期更新)
  5. PyCharm将制表符转换为空格并显示的配置方法
  6. 两个CRunTime库排序算法调用,但是更值得注意的”指针“以及“三目”
  7. linux的functions之killproc函数详解
  8. jpg/png格式图片转eps格式
  9. 只能输入数字或含两位小数的正则
  10. 知乎高赞:当update修改数据与原数据相同时会再次执行吗?
  11. 你需要来自trustedinstaller的权限才能删除_一文详解To B权限设计
  12. 动态时间规整—DTW算法
  13. 贰贰许远东在浙江省社科联学术年会上关于“中小企业数字化之路”的分享
  14. 计算机网络互连基础技术及实战
  15. OpenCV drawMatches出现报错Error: Assertion failed
  16. 编程实现根据公式π/4=1-(1/3)+(1/5)-(1/7)...计算π的值
  17. 虹科案例 | 解决ASRS系统的痛点问题居然这么简单?(上)
  18. 一些基础条件判断语句
  19. 人工智能:语音识别技术介绍
  20. 如何设置Windows XP自动登录

热门文章

  1. freebsd 安装php,FreeBSD下Apache的PHP模块的安装
  2. 2017年前端面试题整理汇总100道题
  3. 2014ACM/ICPC亚洲区广州站 北大命题
  4. js return匿名函数
  5. 打印设置(3)- 首页不打印页码
  6. 亲子教育语境下的“为君难”和“为臣不易”
  7. 计算机桌面图标被挡怎么办,电脑桌面左部的图标被遮挡住了部分,请问怎样修改啊...
  8. Linux的ctrl-alt-f1...ctrl- alt-f7
  9. Sqlite源码解读(十)
  10. ofo,请把押金还给我!