当前位置: 首页 > news >正文

在网站做电子画册无锡网站建设团队

在网站做电子画册,无锡网站建设团队,内江市建设教育培训官方网站,景点网站建设方案2316. 统计无向图中无法互相到达点对数 中等 给你一个整数 n #xff0c;表示一张 无向图 中有 n 个节点#xff0c;编号为 0 到 n - 1 。同时给你一个二维整数数组 edges #xff0c;其中 edges[i] [ai, bi] 表示节点 ai 和 bi 之间有一条 无向 边。 请你返回 无法互相…2316. 统计无向图中无法互相到达点对数 中等 给你一个整数 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 1050 edges.length 2 * 105edges[i].length 20 ai, bi nai ! bi不会有重复边。 DFS class Solution {// 统计联通分量 个数 和 大小// 然后递推求出点对个数// 例如 4 1 2// 4 * 1 5 * 2public long countPairs(int n, int[][] edges) {ListInteger[] g new ArrayList[n];Arrays.setAll(g, e - new ArrayList());for(int[] e : edges){int x e[0], y e[1];g[x].add(y);g[y].add(x);}boolean[] vis new boolean[n];ListInteger list new ArrayList();for(int i 0; i n; i){if(!vis[i]){int cnt dfs(i, -1, g, vis);list.add(cnt);}}long res 0l, sum 0l;for(Integer e : list){res e * sum;sum e;}return res;}private int dfs(int x, int fa, ListInteger[] g, boolean[] vis){int res 1;vis[x] true;for(int y : g[x]){if(y ! fa !vis[y])res dfs(y, x, g, vis);}return res;} }并查集 统计连通块大小可以用并查集做 class Solution {// 统计联通分量 个数 和 大小public long countPairs(int n, int[][] edges) {UF uf new UF(n);for(int[] e : edges){uf.union(Math.max(e[0], e[1]), Math.min(e[0], e[1]));}MapInteger, Integer map new HashMap();for(int i 0; i n; i){map.merge(uf.find(i), 1, Integer::sum);}long res 0l, sum 0l;for(int x : map.keySet()){res (long)map.get(x) * sum;sum map.get(x);}return res;} }/* ------------ 并查集模版 ------------ */ class UF {int[] parent; // par数组用来存储根节点par[x]y表示x的根节点为yint[] size; // size[i]表示以i为根的联通块大小int count; // count表示连通块个数每次调用union时count-1public UF(int n) {this.count n;parent new int[n];size new int[n];for (int i 0; i n; i) {parent[i] i;size[i] 1;}}public void union(int x, int y) {int rootx find(x);int rooty find(y);if (rootx rooty) return;else//不是同一个根即不在同一个集合就合并parent[rootx] rooty;size[rooty] size[rootx];count--;}public int find(int x) {// 路径压缩if (parent[x] ! x) {parent[x] find(parent[x]);}return parent[x];} }
http://www.hkea.cn/news/14258644/

相关文章:

  • 昆明乐网网站建设网站由哪些部分组成
  • 怎么一个网站做的竞价莱芜在线广告信息
  • 专业的营销型网站制作音乐网站 模板
  • 建设鲜花网站前的市场分析百度推广代理商返点
  • 电商网站 开发费用军人运动会官方网站建设目标
  • 网站的规划与建设课程设计公司网站 域名
  • 广州网站备案公司一站式做网站设计
  • 铜仁市网站建设wordpress数据库版本号
  • 广州网站建设电话大全wordpress添加小工具
  • 理县网站建设大学生做静态网站
  • win8风格企业网站苏州 网站的公司哪家好
  • 上海做网站的公司排名网页制作流程及详细步骤
  • 电商网站建设技术外包谷歌网页版入口在线
  • 网站安全建设情况报告昆明抖音代运营
  • 做网站的内容资源怎样才能建立网站
  • 好的手机端网站模板下载seo技术手段
  • 旅游网站开发网站设计报告书服务器租用多少钱一月
  • 国外网站备案吗用html制作登录注册界面
  • 大庆开发网站公司怎么建设淘宝联盟的网站
  • 移动网站建设推荐怎么申请免费企业邮箱账号
  • 乐山市住房和城乡规划建设局网站网站建设的ppt模板下载
  • 网站浏览器不兼容怎么办建设网站遇到的问题
  • 公司网站制作流程2016南宁建站热搜
  • 网站项目开发的一般流程企业进行网站建设的方式有( )
  • 国外手机网站模板设计参考网站推荐
  • 做网站哪个软件好用服装定制店的前景
  • 杭州建设监理协会网站wordpress 显示发布时间
  • 个人博客网站开发历程郑州建站的
  • 网站建设图片居中代码网页制作题怎么编辑
  • 本地网站建设方案信息大全软件工程与项目管理