我在Spoj上遇到了一个问题,基本上可以简化为检测图是否为二分图。我正在尝试仅使用dfs为图形着色,但这太慢了。有人对此发表评论
无bfs,无dfs,无二部图。简单的联合查找集将使其(确实具有速度)。 提示1: 偶数长度的周期不会影响两个节点之间路径长度的2(哇,一个单词中有这么多i)。 提示2: (扰流板) 令dist [i]为从i到parent [i]的路径的距离。使用find和union函数更新它。可以将dist设为bool数组。
有人可以解释他的意思吗?我认为他想说的是,对于每个节点,您都存储了节点与代表元素之间的距离。然后,如果您尝试合并同一集合中的两个节点,并且它们具有相同的奇偶校验,那么您将创建一个奇数周期,因此该图不能是二分图。但是,我不知道如何实现。在考虑距离的同时如何合并两个集合?您是否不必浏览整个集合以查找所有要更新的元素?
答案 0 :(得分:2)
给定一个以邻接表(即边列表)表示的图,可以确定它是否是二分的,如下所示: