每日一题 2316. 统计无向图中无法互相到达点对数(中等,图连通分量)

  1. 题目很简单,只要求出每个连通分量有多少个节点即可
  2. 首先通过建立一个字典来表示每个节点的邻接关系
  3. 遍历每个节点,并通过邻接关系标记在当前连通分量内的所有的点,这样就可以知道一个连通分量内有多少个点
  4. 在这里我陷入了一个误区,导致最后超时,我一开始把所有的连通分量的点数都求出来之后,再将他们两两组合得到最后的答案(耗时O(a2) 其中a是连通分量的数量),而事实上对于每个连通分量它的组合数就是 cnt * (n - cnt) 只要 O(a) 就可以求出来,最后由于每一个点对都被计算了两次,因此需要 ans // 2
python 复制代码
class Solution:
    def countPairs(self, n: int, edges: List[List[int]]) -> int:
        d = defaultdict(list)
        isCnt = set()
        for i in range(len(edges)):
            d[edges[i][0]].append(edges[i][1])
            d[edges[i][1]].append(edges[i][0])
        ans = 0
        for i in range(n):
            if i in isCnt:
                continue
            cnt = 1
            l = d[i]
            isCnt.add(i)
            while len(l) > 0:
                newl = []
                for j in l:
                    if j in isCnt:
                        continue
                    newl.extend(d[j])
                    cnt += 1
                    isCnt.add(j)
                l = newl.copy()
            ans += cnt * (n - cnt)
        return ans // 2
相关推荐
胖咕噜的稞达鸭2 分钟前
算法入门:专题前缀和:一二维前缀和 寻找数组的中心下标 除自身以外数组的乘积 和为k的子数组 和可被k整除的子数组 连续数组 矩阵区域和
线性代数·算法·矩阵
艾上编程2 分钟前
《Python实战小课:数据分析场景——解锁数据洞察之力》导读
python·数据挖掘·数据分析
天赐学c语言3 分钟前
12.13 - 岛屿数量 && C语言中extern关键字的作用
c++·算法·leetcode
Lyinj3 分钟前
从一个编辑校验问题谈接口设计的边界
java·spring boot·python·学习
纪伊路上盛名在4 分钟前
文献阅读自动化1-批量检索、更新文献
python·自动化·文献阅读·科研日常·流程化
梦白.5 分钟前
Python字符串类型
linux·python
AndrewHZ8 分钟前
【图像处理基石】如何入门图像金字塔算法技术?
图像处理·算法·计算机视觉·cv·拉普拉斯变换·图像金字塔
gf13211119 分钟前
python_图片、字幕文本、音频一键组合
python·音视频·swift
_w_z_j_12 分钟前
全排列问题(包含重复数字与不可包含重复数字)
数据结构·算法·leetcode
7ioik13 分钟前
jvm垃圾回收算法?
jvm·算法