P11664 [JOI 2025 Final] 缆车 / Mi Teleférico

首先注意到图是一个 DAG,那么我们考虑什么情况下是合法的。发现首先是 \(1\) 必须是唯一的一个入度为 \(0\) 的点,且所有点的入度不为 \(0\) 即可。虽然直接想到了但是补一个证明:

1.必要性。如果存在一个入度为 \(0\) 且非 \(1\) 的点,那么也就是说没有有向边可以到达,故非法。
2. 充分性。因为除 \(1\) 外没有入度为 \(0\) 的点,所以这些点将属于同一个连通块,而有因为均有入度,且不存在环,所以故一定可以到达所有的点。

那么我们之后观察到,对于一个区间,如果它包含了一个合法区间那么它也一定是合法的,所以我们至少希望求出每一个 \(l\) 所对应的最短区间 \([i,r_i]\)。之后我们只需要判断对于一个询问我们能否只使用 \(X\) 次来至少包含一个 \([i,r_i]\)。即:

\[\exists i,k,L-k\leq i,r_i\leq R+X-k \]

那么我们发现这样 \(L\) 只需要扩张到 \(i\) 即可,即 \(k=L-i\),其中 \(L-X\leq i\leq L\)。那么转成

\[\exists i,r_i-i\leq R+X-L \]

那么就变成了定值,只需要随便用一个数据结构维护一下 RMQ 即可。

之后看如何维护 \(r_i\)。由单调性想到双指针。由于新加入的点都在 \([i,r_i]\) 之中所以我们只需要维护每个点目前的最大值即可。之后再看一下全局最小值是否大于等于 \(i\) 即可。用线段树维护全局最小值与单点修改。

posted @ 2025-10-24 15:11  tanghg  阅读(7)  评论(0)    收藏  举报