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

编程入门 行业动态 更新时间:2024-10-24 22:26:32

【算法题】统计无向图中无法互相到达点<a href=https://www.elefans.com/category/jswz/34/1722495.html style=对数"/>

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

题目:

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

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

示例 1:

输入:n = 3, edges = [[0,1],[0,2],[1,2]]
输出:0
解释:所有点都能互相到达,意味着没有点对无法互相到达,所以我们返回 0 。
示例 2:

输入: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);}
}

更多推荐

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

本文发布于:2023-12-06 06:07:32,感谢您对本站的认可!
本文链接:https://www.elefans.com/category/jswz/34/1666680.html
版权声明:本站内容均来自互联网,仅供演示用,请勿用于商业和其他非法用途。如果侵犯了您的权益请与我们联系,我们将在24小时内删除。
本文标签:对数   图中   算法

发布评论

评论列表 (有 0 条评论)
草根站长

>www.elefans.com

编程频道|电子爱好者 - 技术资讯及电子产品介绍!