令 $dis_{u,s}$ 表示 在 $\\mod L=s$ 到达 $u$ 的最小时间,其中 $L$ 表示 $u$ 所在环。

\(dis_{u,s}\) 表示 在 \(\mod L=s\) 到达 \(u\) 的最小时间,其中 \(L\) 表示 \(u\) 所在环。

对于状态 \(dis_{u,s}\) ,考虑所有的边 \((u,v)\)

\(u,v\) 有一个不在环上时,转移可以分为:

  1. 如果能过去就直接过去。
  2. 等到 \(v\) 被占据之后再跟过去(跟在守卫后面)。

\((u,v)\) 为一条环边时,则只需要考虑能否直接走环边。

\(u\)\(v\) 都在环上时,可以将转移压缩为以下几种:

  1. \(t\) 表示 \(v\) 下一个被占据的时刻,如果 \(t\) 时刻 \(u\) 没有被占据,则可以采取以下方式:

    1. 通过这条边到达 \(v\)
    2. \(t\) 时刻回到 \(u\)
    3. 然后在 \(t+1\) 时刻去 \(v\)

    最后就可以跟在 \(v\) 环的守卫后面。

  2. 如果 \(t\) 时刻 \(v\) 被占据了:

    \(t'\) 表示 \(t\) 时刻以后,下一个回到 \(\mod L=s\) 的时刻,用 \(t'+1\) 更新。

    \(t''\) 表示 \(t'\) 时刻以后,下一个 \(v\) 被占据的时刻,再次检查能否用 \(1\) 中的方案。 此时由于要多留一轮,需要判断