2019牛客暑期多校训练营(第八场)E.Explorer

本文介绍了一种结合图论、线段树和并查集的算法,用于解决特定图上的路径问题。通过对边的size属性离散化,利用线段树存储边信息,再结合并查集判断连通性,最终通过深度优先搜索(DFS)找到所有可能的size值,使得从起点到终点存在路径。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

题意:给你一张有着n个点的图,图上有m条边,每条边有一个属性[l,r]代表只有size在这个区间范围内的才能通过,你在一开始可以喝下一瓶魔法药水,改变自己的size,问你有多少种可能的size使你能从1号点走到n号点。

思路:对size离散化,线段树节点存储size段,按秩合并幷查集判断是否连通,dfs从线段树根节点遍历所有可能到达的路径。

详细操作:

首先我们将题目给出的m条边的size从小到大离散化,根据[l,r]属性找线段树代表[l,r]区间的对应节点,然后push进去,比如离散化之后我有一条边的属性是[1,4],我就得放到线段树中代表[1,4]的节点中去

如果我们有一条边的属性是[1,3]那么它就得迭代它的l,r,放到对应着区间[1,2],[3,3]的线段树节点里去

所有边都push进线段树节点之后,我们开始从根节点dfs,每次当搜索到叶子节点的时候,我们可以判断1号点是否和n号点在一个集合里边,如果在的话,这个叶子节点所代表的区间段就是可行的size。

显然这种方法是可行的,因为当我们搜索到一个线段树节点的时候,假若这个节点所代表的size是[l,r],如果我们往[1,l-1],[r,max_r]区间搜索,显然是无法形成通路的,因为size段没有形成交集,所以我们每次dfs走到叶子节点所判断的所有可行size必定就是答案全部的可行size。

至于为什么要走到叶子节点再判断是否size段是否可行,因为我们没

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值