Loading

12.12 CW 模拟赛 T1. 理想路径

前言

作为一个别的不行抗伤无敌的 \(\rm{man}\) , 区区反向 \(\rm{rk \ 1}\) 不足为惧

\(\rm{HD0X}\) 巨佬场切 \(2700\) , \(\%\%\%\)

思路

朴素

先把考场上一些基础的想法搬过来

考虑一个环什么时候会导致产生字典序负环, 这个好像还比较显然, 就是如果出去的那个点的字典序小于环上下一个点的字典序, 那就寄了, 怎么处理

枚举每个数作为起点的询问, \(\mathcal{O} (n + m)\) 全部处理出来即可, 这一部分用 \(\rm{dfs}\) 可以解决

那么怎么去考虑字典序负环的问题, 我们发现只要在某一个地方, 字典序最小的选择在环上就寄

我们考虑预处理出那些点可以到达目标点, 然后每次选择只在可以到达的情况下找字典序最小, 如果字典序最小的选择已经被访问过了(即在环上), 那么就无解

正常

这里的正常指符合 \(2700\) 的难度

容易发现枚举起点的做法, 但是这样子不大优, 瓶颈在转移的过程中需要拷贝之前的访问串串

我们也是光速联想到之前的神秘转移倍增, 那么这个题也可以这样做

具体的, 令 \(f_{s, t, i}\) 表示从 \(s \to t\) 的理想路径上的 \(2^i\) 个点, 询问和新插入都是 \(\log\)

\(f\) 开成 \(\rm{short}\) 类型, 结束

实现

略掉了, 并不难实现, 难得是想

总结

对于一些需要考虑一个点是否在环上的问题, 我们可以 \(\rm{dfs}\) 判断是否已经访问过

对于问题范围比较小时, 可以考虑预处理一些不好实现的东西

倍增作为一种很好的 \(\rm{trick}\) , 多加利用

对于一些有环图, 可能你不需要进行缩点, 因为可以加上判环来解决

posted @ 2024-12-12 19:22  Yorg  阅读(6)  评论(0编辑  收藏  举报