【Leetcode】1697. Checking Existence of Edge Length Limited Paths
题目地址:
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相关推荐
- 【LeetCode】1697. 检查边长度限制的路径是否存在
题目描述 给你一个 n 个点组成的无向图边集 edgeList ,其中 edgeList[i] = [ui, vi, disi] 表示点 ui 和点 vi 之间有一条长度为 disi 的边.请注意,两 ...
- 【LeetCode】﹝并查集ி﹞连通分量个数(套用模板一直爽)
[LeetCode]﹝并查集ி﹞连通分量个数(套用模板一直爽) 文章目录 [LeetCode]﹝并查集ி﹞连通分量个数(套用模板一直爽) 模板(使用路径压缩的加权quick-union算法) 连通网络 ...
- 【LeetCode 】试题总结:广度优先搜索(BFS)
[LeetCode ]试题总结:广度优先搜索(BFS) 一.数据结构:二叉树中的 BFS (一).二叉树的堂兄弟节点 试题链接 解题思路 代码 (二).二叉树的层序遍历 II (三).二叉树的锯齿形层 ...
- 【Leetcode】100. 相同的树
题目 给定两个二叉树,编写一个函数来检验它们是否相同. 如果两个树在结构上相同,并且节点具有相同的值,则认为它们是相同的. 示例 1: 输入: 1 1/ \ / \2 3 2 3[1,2,3], [1 ...
- 【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 ...
- 【leetcode】486. Predict the Winner
题目如下: Given an array of scores that are non-negative integers. Player 1 picks one of the numbers fro ...
- 【leetcode】132. Palindrome Partitioning II
题目如下: 解题思路:本题是[leetcode]131. Palindrome Partitioning的升级版,要求的是求出最小cuts,如果用[leetcode]131. Palindrome P ...
- 【leetcode】86. Partition List
题目如下: Given a linked list and a value x, partition it such that all nodes less than x come before no ...
- 【Leetcode】103. 二叉树的锯齿形层次遍历
题目 给定一个二叉树,返回其节点值的锯齿形层次遍历.(即先从左往右,再从右往左进行下一层遍历,以此类推,层与层之间交替进行). 例如: 给定二叉树 [3,9,20,null,null,15,7], 3 ...
最新文章
- Colly源码解析——框架
- JS删除数组指定下标并添加到数组开头
- 2021年春季学期-信号与系统-第十四次作业参考答案-第二小题参考答案
- python小项目案例-python_flask小项目实例-编一个小网站
- Http Tunnel 小记
- RHEL6入门系列之二十七,源码安装及软件安装综合实例
- springboot页面乱码问题
- Spring Boot整合Servlet,Filter,Listener,访问静态资源
- 蓝桥杯 ALGO-71 算法训练 比较字符串
- 【CarMaker学习笔记】申请使用账号
- IDEA 中 project窗口,不显示项目工程目录,解决方法
- PowerShell 实现批量下载文件
- turtle库画图单击鼠标获取坐标位置
- 【PAT A1094】The Largest Generation
- WiFi Display 介绍
- 运维-系统监控方案:基于Grafana的TDengine零依赖监控解决方案
- dota自走棋寻找不到服务器,《DOTA自走棋》服务器不对怎么办 服务器不对解决方法介绍...
- 内核proc参数注释(kernel、vm、net、fs四类)
- 如何查看大型工程源代码(非常不错)
- 泛微oa数据库之查询流程批次条件、出口条件