当前位置:
首页 > 编程开发 > 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]]))
最新更新
c#&vb两种语言语法的简要介绍
C#对数据库的操作
来自重粒子的C#程序
c#的抽奖程序[英文]
C#,自然的进步
一个用c#写的扫描asp源码漏洞的应用程序
一个用c#写的扫描asp源码漏洞的应用程序
C#操作技巧的数据类型之间的转换
用浏览器来接收C# 的程序返回的时间c
C#中的函数重载
【15天掌握SQLServer基础】-01 创建、修改
用 Access+Outlook 来采集信息
使用PowerDesigner生成Access数据库
让我们一起用开源数据库和开源框架废弃
随说秋色园从Access升迁到MSSQL过程
当爬虫被拒绝时(Access Denied)
Web API与OAuth:既生access token,何生refres
[认证 & 授权] 6. Permission Based Access Co
Access之C#连接Access
oracle 19c下载和安装教程(database和client)
php的计数器每次都会清零
PHP基础
数据类型之对象
数据类型之布尔型、整型、浮点型和字符
php教程之数据类型之数组
php教程之PHP 常量
php教程之变量
php教程之语法
PHP简介与安装
phpMyAdmin配置安装全攻略