• 【CF1693C】Keshi in Search of AmShZ(类dijkstra)


    首先可以钦定每次只删当前点的出边。

    然后可以注意到,在最优策略下,我们肯定不会走回重复的点:否则意味着出现了一个环,那么我们还是需要将这个环上的某条边删掉(否则最坏情况就是绕着环一直走),那么不如第一次走到的时候就删掉。

    这意味着,我们删除某条边不会带来后效性,换言之最优策略中我只关心当前点在哪,并不关心我之前删了哪些边(因为我不可能走到一个重复的点)。

    那么可以考虑设 f u f_u fu 表示当前点在 u u u 时,按最优策略走,最坏情况下到 n n n 所需的步数。

    不妨假设所有 f f f 都已经求出来了,那么对于任意 u ≠ n u\neq n u=n,将 u u u 的所有出点对应的 f f f 从小到大排序,设 r k u , v rk_{u,v} rku,v 表示 v v v 排在第几位。
    f u = 1 + min ⁡ ( u , v ) ∈ E ( f v + o u t u − r k u , v ) f_u=1+\min_{(u,v)\in E}(f_v+out_u-rk_{u,v}) fu=1+(u,v)Emin(fv+outurku,v)
    而对于 u = n u=n u=n,应当有 f n = 0 f_n=0 fn=0

    考虑如何求出 f f f,我们用类似 dijkstra 的方法。

    归纳地假设对于任意 u ∈ S u\in S uS S S S { 1 , ⋯   , n } \{1,\cdots,n\} {1,,n} 的子集)有 f u f_u fu 已经确定,且对于任意 u ∈ S , v ∉ S u\in S,v\not\in S uS,vS f u ≤ f v f_u\leq f_v fufv。初始时 S = { n } S=\{n\} S={n},且对于任意 v ∉ n v\not\in n vn 显然有 0 = f n ≤ f v 0=f_n\leq f_{v} 0=fnfv

    对于任意 u ∉ S u\not\in S uS,将出点中属于 S S S 的那部分点对应的 f f f 排序(它们的 f f f 是已经确定了的),然后对于每个出点 v v v 满足 v ∈ S v\in S vS 定义 r k u , v ′ rk'_{u,v} rku,v 表示 v v v 排在第几位,那么根据归纳假设容易知道 r k u , v ′ = r k u , v rk'_{u,v}=rk_{u,v} rku,v=rku,v

    f u ′ = 1 + min ⁡ ( u , v ) ∈ E , v ∈ S ( f v + o u t u − r k u , v ′ ) f'_u=1+\min\limits_{(u,v)\in E,v\in S}(f_v+out_u-rk'_{u,v}) fu=1+(u,v)E,vSmin(fv+outurku,v),那么应有 f u ≤ f u ′ f_u\leq f'_u fufu

    M = min ⁡ u ∉ S f u ′ M=\min\limits_{u\not\in S}f'_u M=uSminfu,欲证明对于任意 u ∉ S u\not\in S uS f u ≥ M f_u\geq M fuM

    u = argmin ⁡ u ∉ S f u u=\underset{u\not\in S}{\operatorname{argmin}}f_{u} u=uSargminfu,只需证明 f u ≥ M f_u\geq M fuM 即可。若 f u < M f_ufu<M,则应存在 v ∉ S v\not\in S vS 使得 f u = 1 + f v + o u t u − r k u , v > f v f_u=1+f_v+out_u-rk_{u,v}>f_v fu=1+fv+outurku,v>fv,这与 f u f_u fu 是最小值矛盾。

    u = argmin ⁡ u ∉ S f u ′ u=\underset{u\not\in S}{\operatorname{argmin}}f'_{u} u=uSargminfu,刚刚我们得到了 f u ≥ f u ′ f_u\geq f'_{u} fufu,而又 f u ≤ f u ′ f_u\leq f'_{u} fufu,从而我们得到 f u = f u ′ f_u=f_u' fu=fu

    那么我们可以将 u u u 加入 S S S,而且容易证明归纳假设成立。

    其实这个问题和最短路很类似,但需要满足的方程中多了和 f v f_v fv 的排位有关,但 dijkstra 过程中这个东西我们已经求出来了,所以它不将带来什么影响。

  • 相关阅读:
    [运维|数据库] MySQL中的存储过程语句,在PostgreSQL中为什么是函数
    kakfa 3.5 kafka服务端处理消费者客户端拉取数据请求源码
    【毕业季·进击的技术er】业务和技术同等重要 · 职场人工作一年的经验之谈
    【温故而知新】构建高可用Linux服务器(二)
    堪称一绝!阿里技术人都用的 Nginx 笔记手册,应用到架构齐全
    Intel CPU
    python经典编程100例(1)
    【王道计算机组成原理】第四章 指令系统
    Vue--》超详细教程——vue-cli脚手架的搭建与使用
    高通平台Android 蓝牙调试和配置手册-- Pairing Failure
  • 原文地址:https://blog.csdn.net/ez_lcw/article/details/126945431