肃宁县网站建设公司,如何做好网站的推广工作,网络设计专业究竟好不好就业,商标注册需要多少钱#x1f680; 算法题 #x1f680; #x1f332; 算法刷题专栏 | 面试必备算法 | 面试高频算法 #x1f340; #x1f332; 越难的东西,越要努力坚持#xff0c;因为它具有很高的价值#xff0c;算法就是这样✨ #x1f332; 作者简介#xff1a;硕风和炜#xff0c;… 算法题 算法刷题专栏 | 面试必备算法 | 面试高频算法 越难的东西,越要努力坚持因为它具有很高的价值算法就是这样✨ 作者简介硕风和炜CSDN-Java领域新星创作者保研|国家奖学金|高中学习JAVA|大学完善JAVA开发技术栈|面试刷题|面经八股文|经验分享|好用的网站工具分享 恭喜你发现一枚宝藏博主,赶快收入囊中吧 人生如棋我愿为卒行动虽慢可谁曾见我后退一步 算法题 目录 题目链接⛲ 题目描述 求解思路实现代码运行结果⚡ BFS 乘法原理 求解思路 实现代码 运行结果 共勉 题目链接
2316. 统计无向图中无法互相到达点对数
⛲ 题目描述
给你一个整数 n 表示一张 无向图 中有 n 个节点编号为 0 到 n - 1 。同时给你一个二维整数数组 edges 其中 edges[i] [ai, bi] 表示节点 ai 和 bi 之间有一条 无向 边。
请你返回 无法互相到达 的不同 点对数目 。 提示
1 n 105 0 edges.length 2 * 105 edges[i].length 2 0 ai, bi n ai ! bi 不会有重复边。 求解思路实现代码运行结果 ⚡ BFS 乘法原理 求解思路
题目让我们求解是从找到所有无法互相到达的不同点对数目我们可以先找到每一个连通块的节点个数cnt因为一共是n个节点所以剩下的不能到达的节点个数就是(n-cnt)所以当前连通块中所有节点不能到达其它节点的个数是cnt * (n-cnt)-乘法原理。因为这只是一个连通块其它情况类似遍历下去找到所有情况。具体实现的时候我们需要先建无向图然后通过bfs求解同时需要维护vis访问的节点的数组避免重复访问。最后因为每个节点双向计算了两次。我们需要将结果/2来得到最终的结果。具体求解的过程步骤请看下面代码。 实现代码
class Solution {public long countPairs(int n, int[][] edges) {long ans0;ArrayListInteger[] listnew ArrayList[n]; Arrays.setAll(list,e-new ArrayList());for(int[] edge:edges){int fromedge[0],toedge[1];list[from].add(to);list[to].add(from);}QueueInteger queuenew LinkedList();boolean[] visnew boolean[n];Arrays.fill(vis,false);for(int i0;in;i){if(!vis[i]){queue.add(i);vis[i]true;int cnt0;while(!queue.isEmpty()){int sizequeue.size();for(int j0;jsize;j){int curqueue.poll();cnt;for(int node:list[cur]){if(!vis[node]){queue.add(node);vis[node]true;}}}}ans(long)(n-cnt)*cnt;}}return ans/2;}
} 运行结果 共勉
最后我想和大家分享一句一直激励我的座右铭希望可以与大家共勉