专栏文章
题解:P12039 [USTCPC 2025] 高位逼抢
P12039题解参与者 1已保存评论 0
文章操作
快速查看文章及其快照的属性,并进行相关操作。
- 当前评论
- 0 条
- 当前快照
- 1 份
- 快照标识符
- @mipobte1
- 此快照首次捕获于
- 2025/12/03 15:16 3 个月前
- 此快照最后确认于
- 2025/12/03 15:16 3 个月前
宣传博客:USTCPC25 F&K 题解
这道题是一个远古(中学时想的) idea,没想到成大三老登了竟然还能用上。
判定问题
假设 一定,那么球位于某些点的时候,A 是不败的,称这些点为 胜点,其余点是 败点。考虑如何判定每一个点的胜败。
一个点 是败点的充要条件是:
于是可以通过类似拓扑排序的方式,求出所有败点:
- 首先把所有满足 的点入队,这些点一定是必败无疑的。
- 取出队首,更新与该点相连的点 的 的值,如果小于等于 ,则 也入队。
显然,上述过程中,所有进入过队列的点就是败点。
最小化
一个显然的结论是:
对应的败点点集是 对应的败点点集的子集:
对应的败点点集是 对应的败点点集的子集:
所以我们有一个暴力(但对正解有启发性)的方法:
- 首先对 做判定;
- 然后对于在 的判定过程中没有入队的结点,再看是否满足 时的入队条件,若满足则进行 的判定;
- 然后对于在 的判定过程中没有入队的结点,再看是否满足 时的入队条件,若满足则进行 的判定;
- 以此类推……
最后只需要记录每个点在 等于几时入队,即为该点的答案。
优化
发现上述过程中的入队顺序等价于:
把所有节点扔到以
把所有节点扔到以
为关键字排序的小根堆中,每次取出队首并更新相关信息。
时间复杂度为 。
如果把优先队列换成桶,并进行精细实现,可以做到线性复杂度。
相关推荐
评论
共 0 条评论,欢迎与作者交流。
正在加载评论...