题解:P9601 [IOI 2023] 最长路程
容易注意到的是,图一定可以被划分为两条链。
归纳进行,假设现在有两条链
- 若
b 为空,则将新点插入b ; - 若
a 的末尾能插入或者b 的末尾能插入,则直接插入。 - 否则,
a 的末尾与b 的末尾一定有边,那么把b 倒过来接a 后头,然后将b 设置为新点。
此时就得到了两条链。则若
- 若
a 的链头与b 有边或者a 的链尾与b 有边,都可以直接拼上; - 否则,
a 的链头与a 的链尾有边,a 为环,可以在任意位置断开,还是可以直接拼。
同理,判掉
- 若
a 和b 之间无边,直接取较长的。 - 否则,
a 和b 都可以在任意处断开,找到这条边即可。
用二分来寻找边,并对「归纳进行」部分进行模拟,可以做到
考虑优化,发现需要在
这样就做到了确定性