#4594. 检查边长度限制的路径是否存在

    ID: 4594 传统题 1000ms 256MiB 尝试: 4 已通过: 2 难度: 10 上传者: 标签>难度普及/提高-数据结构并查集树结构最小生成树

检查边长度限制的路径是否存在

题目描述

给你一个 nn 个点组成大小为 mm 的无向图边集 edgeListedgeList ,其中 edgeList[i]=[ui,vi,disi]edgeList[i] = [u_i, v_i, dis_i] 表示点 uiu_i 和点 viv_i 之间有一条长度为 disidis_i 的边。请注意,两个点之间可能有 超过一条边 。

给你一个大小为 qq 的查询数组queriesqueries ,其中 queries[j]=[pj,qj,limitj]queries[j] = [p_j, q_j, limit_j] ,你的任务是对于每个查询 queries[j]queries[j] ,判断是否存在从 pjp_j 到 qjq_j 的路径,且这条路径上的每一条边都 严格小于 limitjlimit_j 。

请你返回一个 布尔数组 answeranswer ,其中 answer.length==queries.lengthanswer.length == queries.length ,当 queries[j]queries[j] 的查询结果为 truetrue 时, answeranswer 第 jj 个值为 11 ,否则为 00 。

输入格式

第一行三个空格隔开的整数 n,m,qn,m,q

接下来的 mm 行,每行三个整数,分别表示 ui,vi,disiu_i, v_i, dis_i

再接下来的 qq 行,每行三个整数,分别表示 pj,qj,limitjp_j, q_j, limit_j

输出格式

一行 qq 个空格隔开的 0 或 1,表示答案。

示例 1:

3 4 2
0 1 2
1 2 4
2 0 8
1 0 16
0 1 2
0 2 5
0 1

解释: 上图为给定的输入数据。注意到 0 和 1 之间有两条重边,分别为 2 和 16 。

对于第一个查询,0 和 1 之间没有小于 2 的边,所以我们返回 0 。

对于第二个查询,有一条路径(0 -> 1 -> 2)两条边都小于 5 ,所以这个查询我们返回 1 。

示例 2:

5 4 2
0 1 10
1 2 5
2 3 9
3 4 13
0 4 14
1 4 13
1 0

提示:

  • 2<=n<=1052 <= n <= 10^5
  • 1<=m,q<=1051 <= m, q <= 10^5
  • 0<=ui,vi,pj,qj<=n10 <= u_i, v_i, p_j, q_j <= n - 1
  • ui!=viu_i != v_i
  • pj!=qjp_j != q_j
  • 1<=disi,limitj<=1091 <= dis_i, limit_j <= 10^9
  • 两个点之间可能有 多条 边。

source

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

}