首页 > 编程语言 >【算法题】统计无向图中无法互相到达点对数

【算法题】统计无向图中无法互相到达点对数

时间:2023-10-30 12:33:05浏览次数:45  
标签:cnt int edges vis 算法 无向 tot 对数 ai


题目:

给你一个整数 n ,表示一张 无向图 中有 n 个节点,编号为 0 到 n - 1 。同时给你一个二维整数数组 edges ,其中 edges[i] = [ai, bi] 表示节点 ai 和 bi 之间有一条 无向 边。

请你返回 无法互相到达 的不同 点对数目 。

示例 1:

【算法题】统计无向图中无法互相到达点对数_java代码

输入:n = 3, edges = [[0,1],[0,2],[1,2]]

输出:0

解释:所有点都能互相到达,意味着没有点对无法互相到达,所以我们返回 0 。

示例 2:

【算法题】统计无向图中无法互相到达点对数_算法_02

输入:n = 7, edges = [[0,2],[0,5],[2,4],[1,6],[5,4]]
输出:14
解释:总共有 14 个点对互相无法到达:
[[0,1],[0,3],[0,6],[1,2],[1,3],[1,4],[1,5],[2,3],[2,6],[3,4],[3,5],[3,6],[4,6],[5,6]]
所以我们返回 14 。

提示:

1 <= n <= 10^5
0 <= edges.length <= 2 * 10^5
edges[i].length == 2
0 <= ai, bi < n
ai != bi
不会有重复边。

java代码:

class Solution {
    List<Integer>[] g;
    boolean[] vis;
    int cnt;

    public long countPairs(int n, int[][] edges) {
        g = new ArrayList[n];
        Arrays.setAll(g, e -> new ArrayList<>());
        for (var e : edges) {
            int x = e[0], y = e[1];
            g[x].add(y);
            g[y].add(x);
        }
        vis = new boolean[n];
        var ans = 0L;
        for (int i = 0, tot = 0; i < n; ++i)
            if (!vis[i]) {
                cnt = 0;
                dfs(i);
                ans += (long) cnt * tot;
                tot += cnt;
            }
        return ans;
    }

    void dfs(int x) {
        vis[x] = true;
        ++cnt;
        for (var y : g[x]) if (!vis[y]) dfs(y);
    }
}


标签:cnt,int,edges,vis,算法,无向,tot,对数,ai
From: https://blog.51cto.com/u_6813689/8087467

相关文章

  • 基于多尺度分形残差注意力网络的超分辨率重建算法
    1.引言深度神经网络可以显著提高超分辨率的质量,但现有方法难以充分利用低分辨率尺度特征和通道信息,从而阻碍了卷积神经网络的表达能力。针对此类问题,本章提出了一种多尺度分形残差注意力网络(Multi-scaleFractalResidualAttentionNetwork,MFRAN)。具体而言,MFRAN由分形残差块(Fra......
  • 算法:实现中序遍历(3种方法图例详解,小白也能看懂)
     中序遍历:左->中 ->右练习地址:力扣(LeetCode)官网-全球极客挚爱的技术成长平台1、递归法 #Definitionforabinarytreenode.classTreeNode(object):def__init__(self,val=0,left=None,right=None):self.val=valself.left=left......
  • 【智能优化算法】开普勒优化算法KOA附matlab代码
    ✅作者简介:热爱科研的Matlab仿真开发者,修心和技术同步精进,代码获取、论文复现及科研仿真合作可私信。......
  • 去雨去雪去雾算法运行问题汇总记录
    问题一在进行去雨去雪去雾算法过程中,遇到了一个问题,这在先前的电脑运行是都没有出现过,但在博主新买的电脑上却出现了,讲道理是有点小抑郁的。RuntimeWarning:invalidvalueencounteredinscalardivideret=ret.dtype.type(ret/rcount)NaNorInffoundininputtensor.......
  • 国密sm4算法
    一、概述国密算法定义:即国家密码局认定的国产密码算法。通过定义我们可以知道,国密算法有两个要素:1、国家密码局认定在国家密码局官网上,可以看到由其发布的标准规范。2、密码算法首先知道什么是密码,密码就是将正常的信息加密后变为无法正常识别的编码,可以认为是一种混淆......
  • LeetCode每日算法2—两数相加
    题目描述给出两个非空的链表用来表示两个非负的整数。其中,它们各自的位数是按照逆序的方式存储的,并且它们的每个节点只能存储一位数字。如果,我们将这两个数相加起来,则会返回一个新的链表来表示它们的和。您可以假设除了数字0之外,这两个数都不会以0开头。示例输入:(2......
  • 10.30算法
    无重复字符的最长子串给定一个字符串s,请你找出其中不含有重复字符的 最长子串 的长度。 示例 1:输入:s="abcabcbb"输出:3解释:因为无重复字符的最长子串是"abc",所以其长度为3。示例2:输入:s="bbbbb"输出:1解释:因为无重复字符的最长子串是"b",所以其长度......
  • 基于深度学习的自动驾驶汽车语义分割与场景标注算法研究。
    自动驾驶汽车是当前研究的热点领域之一,其中基于深度学习的语义分割与场景标注算法在自动驾驶汽车的视觉感知中具有重要作用。本文将围绕自动驾驶汽车的语义分割与场景标注算法展开研究。一、研究背景随着人工智能技术的不断发展,自动驾驶汽车逐渐成为汽车产业的重要发展方向。在......
  • 【基础算法】枚举
    一、枚举思想枚举法,也称穷举法,是指在解决问题的时候穷举每一种可能的情况,最终得到符合要求的答案。枚举法的效率并不高,但适用于一些没有明显规律可循的场景。枚举的算法思想:在解决某些问题时,可能没有办法按一定规律从众多候选答案中找到正确的解。这时,可将所有候选答案逐一列出,......
  • 数据结构与算法-cnblog
    数据结构与算法课程笔记树与二叉树树的深度与高度高度就可以理解为深度看层数:如果根结点第0,层数=深度=高度-1如果根结点第1,层数=深度=高度深度定义是从上往下的,高度定义是从下往上的......