[ABC250Ex] Trespassing Takahashi

感觉是很厉害的结论题。

题意

给你一个带权无向连通简单图 G=(V,E),|V|=n,|E|=m。钦定编号 1k 的点为关键点。给定 q 次询问,每次询问给出 x,y,t,表示你需要回答是否存在一条路径,使得从 x 出发到 y 的路径上相邻两个关键点的距离都不超过 t。保证 x,y 为关键点且 t 升序。

n,m,q2×105

分析

考虑对关键点之间两两建一条边,边权为原图中两点的最短路,当询问的 t 大于边权时,把该边加进图中。由于只需要维护可达性,可以用并查集维护。

但是把关键点两两之间建边显然太浪费了。

考虑原图每条边的贡献,即每条边在 t 至少为多少时才会发挥作用。

用 dijkstra 跑出关键点到普通点的最短路,那么一条边权为 w 的边 uv 会在 disu+disv+w 时刻被激活并发挥作用。

这样为什么是对的?

考虑两个关键点 x,y 和它们之间的一条路径,如果在某一时刻两个点能通过这一条路径连通,那么路径上的所有边都需要被激活是一个必要条件。

考虑证明充分性:

如果一条从 xy 的路径上的所有边都激活,设路径为 x=v0,v1,v2,,vt=y,那么我们能构造一组合法的从 xy 的方案(这 pi 为距离 i 最近的关键点):v0=pv0,v0,v1,pv1,v1,v2,pv2,,pvt1,vt1,vt,pvt=vt。根据定义,dispu,u+w+disv,pvt,所以每个相邻的 puuvpv 的路径都是合法的,相邻两个关键点的用时都在 t 之内。

根据这个条件,我们只需要将所有边的激活时间升序排序,然后每次询问把激活时间 t 的边激活,并查集维护即可。

时间复杂度 O(nlogn)

代码不放了。

作者:dcytrl

出处:https://www.cnblogs.com/dcytrl/p/18407837

版权:本作品采用「署名-非商业性使用-相同方式共享 4.0 国际」许可协议进行许可。

posted @   dcytrl  阅读(10)  评论(0编辑  收藏  举报
相关博文:
阅读排行:
· 分享一个免费、快速、无限量使用的满血 DeepSeek R1 模型,支持深度思考和联网搜索!
· 基于 Docker 搭建 FRP 内网穿透开源项目(很简单哒)
· ollama系列01:轻松3步本地部署deepseek,普通电脑可用
· 25岁的心里话
· 按钮权限的设计及实现
more_horiz
keyboard_arrow_up dark_mode palette
选择主题
点击右上角即可分享
微信分享提示