当前位置:
首页 > temp > python入门教程 >
-
1319联通网络的操作次数
from typing import List # 我们使用并查集来做这道题,一共N台电脑的话,至少需要n-1根线。 # 并查集模板 class UnionFind: def __init__(self): #记录每一个节点的父节点 self.size = 0 self.father = {} def find(self,x): """寻找根节点,路径压缩""" root = x while self.father[root] != None: root = self.father[root] while x != root: oraginal_father = self.father[x] self.father[x] = root x = oraginal_father return root def merge(self,x,y): """合并两个并查集""" root_x,root_y = self.find(x),self.find(y) if root_x != root_y: self.father[root_y] = x self.size -= 1 def is_connected(self,x,y): """判断两个节点是否相连""" return self.find(x) == self.find(y) def add(self,x): """添加新节点""" if x not in self.father: self.father[x] = None self.size += 1 class Solution: def makeConnected(self, n: int, connections: List[List[int]]) -> int: # 首先判断是否满足所有电脑都相连的条件。 if len(connections) < n - 1: return -1 # 定义一个并查集。 res = UnionFind() # 将所有电脑添加到并查集中。 for i in range(n): res.add(i) # 判断两个电脑是否相连,也就是是否同属于一个根节点。 # 如果不是的话,那么我们就将这两个电脑相连。 # 最后就可以求出来冗余的连线,然后拨动他们,就可以将所有的电脑相连了。 for nums in connections: if not res.is_connected(nums[0],nums[1]): res.merge(nums[0],nums[1]) # 因为size是总的电脑数,跟连线数不一样。 return res.size - 1 # A = Solution() # print(A.makeConnected(4,[[0,1],[0,2],[1,2]]))
最新更新
nodejs爬虫
Python正则表达式完全指南
爬取豆瓣Top250图书数据
shp 地图文件批量添加字段
爬虫小试牛刀(爬取学校通知公告)
【python基础】函数-初识函数
【python基础】函数-返回值
HTTP请求:requests模块基础使用必知必会
Python初学者友好丨详解参数传递类型
如何有效管理爬虫流量?
2个场景实例讲解GaussDB(DWS)基表统计信息估
常用的 SQL Server 关键字及其含义
动手分析SQL Server中的事务中使用的锁
openGauss内核分析:SQL by pass & 经典执行
一招教你如何高效批量导入与更新数据
天天写SQL,这些神奇的特性你知道吗?
openGauss内核分析:执行计划生成
[IM002]Navicat ODBC驱动器管理器 未发现数据
初入Sql Server 之 存储过程的简单使用
SQL Server -- 解决存储过程传入参数作为s
关于JS定时器的整理
JS中使用Promise.all控制所有的异步请求都完
js中字符串的方法
import-local执行流程与node模块路径解析流程
检测数据类型的四种方法
js中数组的方法,32种方法
前端操作方法
数据类型
window.localStorage.setItem 和 localStorage.setIte
如何完美解决前端数字计算精度丢失与数