题目地址:

https://leetcode.com/problems/checking-existence-of-edge-length-limited-paths/

给定一个 n n n个顶点的无向带权图,要求应答若干次询问,每次询问问从点 p p p到点 q q q是否存在一条每条边都小于给定权值 x x x的路径。可以离线应答。

思路是Kruskal算法。这里由于可以离线应答,所以可以先将所有询问按照 x x x来从小到大排序,然后遍历询问,对每个询问 ( p , q , r ) (p,q,r) (p,q,r),模仿Kruskal算法的思路,先将权小于 r r r的边建出来,并且用并查集把连通的点连成一个集合,应答询问的时候只需要看一下 p p p与 q q q是否连通即可。代码如下:

import java.util.ArrayList;
import java.util.Arrays;
import java.util.List;public class Solution {class UnionFind {int[] p;public UnionFind(int size) {p = new int[size];for (int i = 0; i < size; i++) {p[i] = i;}}public int find(int x) {if (p[x] != x) {p[x] = find(p[x]);}return p[x];}public void union(int x, int y) {int px = find(x), py = find(y);if (px != py) {p[px] = py;}}}public boolean[] distanceLimitedPathsExist(int n, int[][] edgeList, int[][] queries) {List<Integer> id = new ArrayList<>();for (int i = 0; i < queries.length; i++) {id.add(i);}id.sort((x, y) -> Integer.compare(queries[x][2], queries[y][2]));UnionFind uf = new UnionFind(n);Arrays.sort(edgeList, (e1, e2) -> Integer.compare(e1[2], e2[2]));boolean[] res = new boolean[queries.length];for (int i = 0, j = 0; i < id.size(); i++) {int idx = id.get(i);int x = queries[idx][0], y = queries[idx][1], len = queries[idx][2];while (j < edgeList.length && edgeList[j][2] < len) {// 把边权小于len的边先连起来uf.union(edgeList[j][0], edgeList[j][1]);j++;}res[idx] = uf.find(x) == uf.find(y);}return res;}
}

时间复杂度 O ( m log ⁡ m + q log ⁡ q + ( m + q ) log ⁡ ∗ n ) O(m\log m+q\log q+(m+q)\log^*n) O(mlogm+qlogq+(m+q)log∗n),空间 O ( m + q ) O(m+q) O(m+q)。

【Leetcode】1697. Checking Existence of Edge Length Limited Paths相关推荐

  1. 【LeetCode】1697. 检查边长度限制的路径是否存在

    题目描述 给你一个 n 个点组成的无向图边集 edgeList ,其中 edgeList[i] = [ui, vi, disi] 表示点 ui 和点 vi 之间有一条长度为 disi 的边.请注意,两 ...

  2. 【LeetCode】﹝并查集ி﹞连通分量个数(套用模板一直爽)

    [LeetCode]﹝并查集ி﹞连通分量个数(套用模板一直爽) 文章目录 [LeetCode]﹝并查集ி﹞连通分量个数(套用模板一直爽) 模板(使用路径压缩的加权quick-union算法) 连通网络 ...

  3. 【LeetCode 】试题总结:广度优先搜索(BFS)

    [LeetCode ]试题总结:广度优先搜索(BFS) 一.数据结构:二叉树中的 BFS (一).二叉树的堂兄弟节点 试题链接 解题思路 代码 (二).二叉树的层序遍历 II (三).二叉树的锯齿形层 ...

  4. 【Leetcode】100. 相同的树

    题目 给定两个二叉树,编写一个函数来检验它们是否相同. 如果两个树在结构上相同,并且节点具有相同的值,则认为它们是相同的. 示例 1: 输入: 1 1/ \ / \2 3 2 3[1,2,3], [1 ...

  5. 【leetcode】85. Maximal Rectangle 0/1矩阵的最大全1子矩阵

    1. 题目 Given a 2D binary matrix filled with 0's and 1's, find the largest rectangle containing only 1 ...

  6. 【leetcode】486. Predict the Winner

    题目如下: Given an array of scores that are non-negative integers. Player 1 picks one of the numbers fro ...

  7. 【leetcode】132. Palindrome Partitioning II

    题目如下: 解题思路:本题是[leetcode]131. Palindrome Partitioning的升级版,要求的是求出最小cuts,如果用[leetcode]131. Palindrome P ...

  8. 【leetcode】86. Partition List

    题目如下: Given a linked list and a value x, partition it such that all nodes less than x come before no ...

  9. 【Leetcode】103. 二叉树的锯齿形层次遍历

    题目 给定一个二叉树,返回其节点值的锯齿形层次遍历.(即先从左往右,再从右往左进行下一层遍历,以此类推,层与层之间交替进行). 例如: 给定二叉树 [3,9,20,null,null,15,7], 3 ...

最新文章

  1. Colly源码解析——框架
  2. JS删除数组指定下标并添加到数组开头
  3. 2021年春季学期-信号与系统-第十四次作业参考答案-第二小题参考答案
  4. python小项目案例-python_flask小项目实例-编一个小网站
  5. Http Tunnel 小记
  6. RHEL6入门系列之二十七,源码安装及软件安装综合实例
  7. springboot页面乱码问题
  8. Spring Boot整合Servlet,Filter,Listener,访问静态资源
  9. 蓝桥杯 ALGO-71 算法训练 比较字符串
  10. 【CarMaker学习笔记】申请使用账号
  11. IDEA 中 project窗口,不显示项目工程目录,解决方法
  12. PowerShell 实现批量下载文件
  13. turtle库画图单击鼠标获取坐标位置
  14. 【PAT A1094】The Largest Generation
  15. WiFi Display 介绍
  16. 运维-系统监控方案:基于Grafana的TDengine零依赖监控解决方案
  17. dota自走棋寻找不到服务器,《DOTA自走棋》服务器不对怎么办 服务器不对解决方法介绍...
  18. 内核proc参数注释(kernel、vm、net、fs四类)
  19. 如何查看大型工程源代码(非常不错)
  20. 泛微oa数据库之查询流程批次条件、出口条件

热门文章

  1. jshint和jslint的区别
  2. 操作系统实验:驱动调度 模拟电梯调度算法 C语言实现
  3. 打印九九乘法口诀表——Java代码实现
  4. 洗地机选哪个牌子好、洗地机排名
  5. Python爬虫-行行查
  6. Android图片选择框架
  7. Neo4j的安装和使用(mac)
  8. 体验笔记本MX350显卡配置深度学习环境(CUDA+tensorflow)
  9. 华硕路由器配置虚拟服务器,华硕路由器开启设置虚拟服务器
  10. 使用O2OA二次开发搭建企业办公平台(十二)流程开发篇:报销审批流程需求和应用创建...