深圳外贸建站模版,创意网站建设设计,顺德网站建设公司价格,网站403错误题目很简单#xff0c;只要求出每个连通分量有多少个节点即可首先通过建立一个字典来表示每个节点的邻接关系遍历每个节点#xff0c;并通过邻接关系标记在当前连通分量内的所有的点#xff0c;这样就可以知道一个连通分量内有多少个点在这里我陷入了一个误区#xff0c;导…
题目很简单只要求出每个连通分量有多少个节点即可首先通过建立一个字典来表示每个节点的邻接关系遍历每个节点并通过邻接关系标记在当前连通分量内的所有的点这样就可以知道一个连通分量内有多少个点在这里我陷入了一个误区导致最后超时我一开始把所有的连通分量的点数都求出来之后再将他们两两组合得到最后的答案耗时O(a2) 其中a是连通分量的数量而事实上对于每个连通分量它的组合数就是 cnt * (n - cnt) 只要 O(a) 就可以求出来最后由于每一个点对都被计算了两次因此需要 ans // 2
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 0for i in range(n):if i in isCnt:continuecnt 1l d[i]isCnt.add(i)while len(l) 0:newl []for j in l:if j in isCnt:continuenewl.extend(d[j])cnt 1isCnt.add(j)l newl.copy()ans cnt * (n - cnt)return ans // 2