CF1033E 题解
题意
交互题,给定一个简单连通图,你可以询问一个点集 ,返回其导出子图的边数。判断此图是否为二分图:若是,输出其中一部点的集合;否则输出任一个奇环。最多询问 次。
。
题解
对原图建立生成树,判断深度奇偶性相同的点是否有连边。
但建树的复杂度已经是 ,且难以优化。注意到条件仅对深度有要求,那么尝试忽略树的形态,仅找出所有点的深度。
可以得出这样一个算法:先找到深度为 的点集(即 ),然后找出所有与其有连边的点,即为深度为 的点集。依次类推。
考虑一下 “找出 中与 有连边的所有点“ 的复杂度。显然有一个 的做法,但不够。我们需要其与答案个数有关,便于均摊。那么考虑分治。判断 与 是否有连边,可以通过 。
那么就通过 得出了所有点的深度。于是可以判断二分图。还有一个问题是,若不是二分图,怎么找到奇环?
不妨设 为所有偶深度点的集合,且 。那么通过枚举所有 ,可以找出一个与 有连边的点。再枚举一遍,就找到一条边 。那么再找到它们到根的路径上的所有点即可,也就是找父亲。这显然可以通过二分。于是此题得解。
本文作者:realFish的博客
本文链接:https://www.cnblogs.com/fish07/p/17072517.html
版权声明:本作品采用知识共享署名-非商业性使用-禁止演绎 2.5 中国大陆许可协议进行许可。
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步