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

思路:DFS(连通块)

其实一开始的时候,并不知道这道题的精髓在哪,总想着,啊?这怎么用图论的思想做啊?

细细思考之后,这道题还是比较有意思的,需要有一定的数据结构基础。

这里让我们求最少连接的操作次数。我们其实可以把这些点统统看成是连通块。

例如第一个例子,0,1,2是不是连在一块了?3是不是独立成一块?也就是说,这个例子里面,有两个连通块。我们需要用几条线来连接?我们发现,只需要一条。也就说,2个连通块需要一条来连接,这样全部点都可以访问;如果是3个连通块呢?其实你已经能推出来了,就是2条。

其实这就跟树一样,n个顶点,至少需要n-1边才能成树(树也是图的一种)。这里就运用了这样的数据结构的基础知识。

好了,我们的任务其实就很明确了,找出有多少块连通块;然后,我们需要统计总共给了我们多少条线;最后,我们需要判断连通这些点的最小线数,然后判断一下题目中给我们的线够不够用。

第一个问题很好解决,dfs遍历,然后用一个全局变量统计就行,不要忘记每次dfs的时候需要更新这个变量;

第二个问题,极其的简单,就是connections的二维数组大小。

第三个问题,我们需要着重注意一下细节,首先,我们需要知道一个连通块最少需要多少条线,其实就是上面的知识点,n个顶点的话n-1个就够了,就能至少形成一个连通块。这样的话,我们其实就是重新统计了一遍每个连通块所用的条数,然后相加到sum中,判断总条数-sum,就是我们能够最大限度用的线了。如果说,我们剩下的线足够我们连通这几个连通块,那么就取能够连通这几个连通块的最小条数,而不取剩下的条数;否则,就不能连接上。

注意:你需要额外定义一个二维数组存储各顶点的联通关系。

上代码:

class Solution {
public:
int counts=0;
void dfs(int u,vector<vector<int>>&s,vector<bool>&st){for(int i=0;i<s[u].size();i++){int tmp=s[u][i];if(!st[tmp]){st[tmp]=true;counts++;dfs(tmp,s,st);}}
}int makeConnected(int n, vector<vector<int>>& connections) {int res=0;vector<vector<int>>s(n);vector<bool>st(n,false);vector<int>ans;for(int i=0;i<connections.size();i++){int x=connections[i][0];int y=connections[i][1];s[x].emplace_back(y);s[y].emplace_back(x);}for(int i=0;i<n;i++){if(!st[i]){st[i]=1;res++;dfs(i,s,st);}ans.push_back(counts);counts=0;}int sum=0;for(int i=0;i<ans.size();i++){sum+=ans[i];}if(connections.size()>=sum)return connections.size()-sum>=res-1?res-1:-1;elsereturn -1;}
};

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/bicheng/11890.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

# Mysql 数据库区分大小写吗?

Mysql 数据库区分大小写吗&#xff1f; 1、MySQL 数据库在区分大小写方面有特定的行为&#xff0c;这取决于多个因素&#xff0c;包括操作系统、配置参数以及使用的字符集。 2、数据库名和表名&#xff1a; 在 Linux 系统中&#xff0c;数据库和表名是严格区分大小写的。 而…

【前端性能优化】深入解析重绘和回流,构建高性能Web界面

&#x1f525; 个人主页&#xff1a;空白诗 文章目录 &#x1f3af; 引言&#xff1a;探索Web性能的基石&#x1f3d7;️ 基础概念&#xff1a;什么是重绘和回流&#xff1f;&#x1f4cc; 回流&#xff08;Reflow&#xff09;&#x1f4cc; 重绘&#xff08;Repaint&#xff0…

蓝桥杯国赛每日一题:交换瓶子(图论,环,贪心)

题目描述&#xff1a; 有 N 个瓶子&#xff0c;编号 1∼N&#xff0c;放在架子上。 比如有 5 个瓶子&#xff1a; 2 1 3 5 4要求每次拿起 2 个瓶子&#xff0c;交换它们的位置。 经过若干次后&#xff0c;使得瓶子的序号为&#xff1a; 1 2 3 4 5对于这么简单的情况&#…

使用Flask部署Web应用:从入门到精通

文章目录 第一部分&#xff1a;准备工作第二部分&#xff1a;部署Flask应用到AWS部署到AWS Lambda 第三部分&#xff1a;部署Flask应用到腾讯云服务器部署到腾讯云服务器 第四部分&#xff1a;优化和扩展结论 在现代软件开发中&#xff0c;Web应用的部署是一个至关重要的环节。…

使用Flask-SocketIO构建实时Web应用

文章目录 准备工作编写代码编写HTML模板运行应用 随着互联网的发展&#xff0c;实时性成为了许多Web应用的重要需求之一。传统的HTTP协议虽然可以实现实时通信&#xff0c;但是其长轮询等机制效率低下&#xff0c;无法满足高并发、低延迟的需求。为了解决这一问题&#xff0c;诞…

python常见数据的存取

python数据的存取 python数据的存取数据的保存3.1.1 保存list3.1.2 保存Dict3.1.3 保存Set3.1.4 保存Dataframe3.1.5 保存Matrix 3.2 数据的读取3.2.1 读取txt文件中的数据3.2.2 读取excel文件中的数据3.2.3 读取csv文件中的数据3.2.4 读取stata文件中的数据3.2.5 读取R文件中的…

计算机发展史故事【14】

大象踢踏舞 如果要把电脑50 年的历史划分为两个不同的阶段&#xff0c;那么&#xff0c;1981 年无疑是个分界线。就在那一年&#xff0c;IBM 公司推出个人电脑PC 机&#xff0c;使人类社会大步跨进个人电脑新时代。今天&#xff0c;全世界正在使用的PC 机已达到2 亿台&#xf…

视频拼接融合产品的产品与架构设计(三)内存和显存单元数据迁移

上一篇文章 视频拼接融合产品的产品与架构设计(二) 这一篇沉下先来&#xff0c;彻底放弃了界面&#xff0c;界面最终的体现是最后要做的&#xff0c;现在要做的是产品的架构&#xff0c;使用链式架构方式迁移数据。同时增加插件口&#xff0c;方便编程序。 插件架构 为了视频…

Android 开机过程画面

Android 开机画面流程 Android 开机动画加载流程涉及bootloader、内核、Android 核心进程、Android文件系统 Bootloader(引导加载程序):当设备启动时,首先由 Bootloader 加载。Bootloader 位于设备的固化存储器中,其主要功能是初始化硬件并启动操作系统。 内核加载:Boo…

Kivy 项目51斩百词 3 屏幕页面转换

MRWord/pages/indexpage/index.py class IndexPage(GridLayout):# 初始化def __init__(self, **kwargs):super().__init__(**kwargs)staticmethoddef index_to_upload():App.get_running_app().screen_manager.current "Upload"定义了一个名为 IndexPage 的类&…

短剧奔向小程序,流量生意如何开启?

随着移动互联网的飞速发展&#xff0c;小程序作为一种轻量级、易传播的应用形态&#xff0c;逐渐在各个领域展现出其独特的商业价值。而最近爆火的短剧小视频作为一种受众广泛的娱乐形式&#xff0c;与小程序结合后&#xff0c;不仅为观众提供了更为便捷的观看体验&#xff0c;…

代码随想录算法训练营第五十三天|LeetCode1143.最长公共子序列、LeetCode1035.不相交的线、LeetCode53.最大子序和

LeetCode 1143 最长公共子序列 题目链接&#xff1a;1143. 最长公共子序列 - 力扣&#xff08;LeetCode&#xff09; 【解题思路】 1.确定dp数组含义 dp[i][j] &#xff1a;长度为[0,i-1]的字符串和长度为[0,j-1]的字符串的最长公共子序列为dp[i][j] 2.确定递推公式 text1[i…

Linux线程(三)死锁与线程同步

目录 一、什么是死锁 死锁的四个必要条件 如何避免死锁 避免死锁算法 二、Linux线程同步 三 、条件变量 1、条件变量基本原理 2、条件变量的使用 3、条件变量使用示例 为什么 pthread_cond_wait 需要互斥量? 一、什么是死锁 死锁是计算机科学中的一个概念&#xff0c;…

Python-VBA函数之旅-type函数

目录 一、type函数的常见应用场景 二、type函数使用注意事项 三、如何用好type函数&#xff1f; 1、type函数&#xff1a; 1-1、Python&#xff1a; 1-2、VBA&#xff1a; 2、推荐阅读&#xff1a; 个人主页&#xff1a; https://myelsa1024.blog.csdn.net/ 一、type函…

设计一个游戏的基本博弈框架

设计一个游戏的基本博弈框架&#xff0c;玩家通过操作改变某个数值&#xff0c;这个数值的变动会引发一系列实时变化&#xff0c;并且当这些数值累计到特定阈值时&#xff0c;会导致游戏中出现其他变化&#xff0c;可以分为以下几个步骤&#xff1a; 1. 确定游戏类型和主题 首…

【rk3568】linux与amp内存分配

关于AMP问题&#xff1a; 1、内存分配&#xff1a;linux端与rtos端内存要分割开。 2、在device/rockchip/rk3568/BoardConfig-rk3568-evb1-ddr4-v10.mk中会定义内存地址需要注意在linux端也需要保留rtos使用的的内存地方&#xff0c;否则可能rtos用的的内存会被linux端使用到…

UE4_照亮环境_不同雾效的动态切换

一、问题及思路&#xff1a; 我们在一个地图上&#xff0c;经常切换不同的区域&#xff0c;不同的区域可能需要不同的色调&#xff0c;例如暖色调的野外或者幽暗的山洞&#xff0c;这两种环境上&#xff0c;雾效的选用肯定不一样&#xff0c;夕阳西下的户外用的就是偏暖的色调&…

2023年数维杯国际大学生数学建模挑战赛A题复合直升机的建模与优化控制问题解题全过程论文及程序

2023年数维杯国际大学生数学建模挑战赛 A题 复合直升机的建模与优化控制问题 原题再现&#xff1a; 直升机具有垂直起降等飞行能力&#xff0c;广泛应用于侦察、运输等领域。传统直升机的配置导致旋翼叶片在高速飞行过程中受到冲击波的影响&#xff0c;难以稳定飞行。为了在保…

558、Vue 3 学习笔记 -【常用Composition API(七)】 2024.05.13

目录 一、Composition API的优势1. Options API存在的问题2. Composition API的优势 二、 新的组件1. Fragment2. Teleport3. Suspense 三、其他1. 全局API的转移2. 其他改变 四、参考链接 一、Composition API的优势 1. Options API存在的问题 使用传统OptionsAPI中&#xf…