【发布时间】:2018-11-11 06:40:49
【问题描述】:
我在 Spoj 上做一个问题,基本上可以简化为检测一个图是否是二分图。我正在尝试使用 dfs 为图形着色,但它太慢了。有些人会这样做
没有 bfs,没有 dfs,没有二方图。简单的 Union-Find Set 会成功(确实是速度)。 提示 #1: 偶数长度的循环不会影响两个节点之间的路径长度被 2 整除(哇,一个词中有这么多 i)。 提示 #2: (剧透) 令 dist[i] 为从 i 到 parent[i] 的路径的距离。使用 find 和 union 函数更新它。可以改进使 dist 成为 bool 数组。
有人能解释一下他的意思吗?我认为他想说的是,对于每个节点,您存储节点和代表元素之间的距离。然后,如果您尝试合并同一集合中的两个节点,并且如果它们具有相同的奇偶性,那么您将创建一个奇数循环,因此该图不能是二分的。但是,我不明白这将如何实现。如何在考虑距离的同时合并两组?您是否不必浏览整个集合以找到要更新的所有元素?
【问题讨论】:
-
@user3386109 是的,但是我将如何使用不相交集 数据结构 来执行此操作(我不是尝试使用不相交集来查找仅连接的两个集合彼此)。
标签: algorithm bipartite disjoint-sets