22

I know that one can detect cycles in direct graphs using DFS and BFS. I want to know whether we can detect cycles in directed graphs using Union-Find or not?

  • If yes, then how? and
  • If we can't, then why?
vinter
  • 466
  • 1
  • 3
  • 13
  • 1
    Hey, that is about DFS vs Union-Find. Both can be used in detecting cycles in the undirected graph but what about the Directed graph? I have never seen detecting cycles using Union-Find for directed graphs. So, I am asking why? Is it cannot be implemented or what? – vinter Apr 12 '20 at 07:29
  • Can you suggest the best resources to learn graph data structures.. and also how/where did you learned graph data structures? – vinter Apr 26 '20 at 18:37
  • how to represent edge in an undirected graph. Is it like 0->1 or both (0->1 and 1->0) – vinter Apr 27 '20 at 02:26
  • Yes you push both the edges in case of undirected graph. There's a really good course called Algorithms 1 on Coursera by Princeton University. It's a great resource. Apart from that I mostly learnt by solving problems on various sites like hackerrank, codeforces – Cherubim Apr 27 '20 at 04:55
  • Study Graphs: there is enough material here - https://www.geeksforgeeks.org/graph-data-structure-and-algorithms/?ref=ghm – Apurva Singh Oct 08 '21 at 19:11

3 Answers3

36

No, we cannot use union-find to detect cycles in a directed graph. This is because a directed graph cannot be represented using the disjoint-set(the data structure on which union-find is performed).

When we say 'a union b' we cannot make out the direction of edge

  1. is a going to b? (or)
  2. is b going to a?

But, incase of undirected graphs, each connected component is equivalent to a set. So union-find can be used to detect a cycle. Whenever you try to perform union on two vertices belonging to the same connected component, we can say that cycle exists.

Cherubim
  • 5,287
  • 3
  • 20
  • 37
14

No.

Let me give you an example:

  • Q1. Take an undirected graph:

Pic1

Is there a cycle in above undirected graph? Yes. And we can find the cycle using Union-Find algo.

  • Q2. Now look at the similar directed graph:

Pic2

Is there a cycle in above directed graph? No! BUT if you use Union-Find algo to detect cycle in above directed graph, it will say YES! Since union-find algo looks at the above diagram as below:

Pic3 OR Pic4

Is there a cycle in above diagram? Yes! But the original(Q2) question was tampered and this is not what was asked. So Union-find algo will give wrong results for directed graphs.

biqarboy
  • 852
  • 6
  • 15
Nikhil Gupta
  • 143
  • 1
  • 7
0

No, we cannot use union-find to detect cycles in a directed graph. This is because a directed graph cannot be represented using the disjoint-set(the data structure on which union-find is performed).

When we say 'a union b' we cannot make out the direction of edge

is a going to b? (or) is b going to a? But, incase of unordered graphs, each connected component is equivalent to a set. So union-find can be used to detect a cycle. Whenever you try to perform union on two vertices belonging to the same connected component, we can say that cycle exists.

Just wanted to add to @Cherubim's answer, I just thought of this question that why can't we make out the direction of 'a union b' like we can consider it as a is connected to b right ('a union b' only nodes which are a->b)?

Well that will also fail, consider two nodes x and y, they are connected x -> y and they already have parents in the disjoint set, x_root and y_root. So what happens when we say 'x union y' (x is connected to y), we make y_root the parent of x_root. well this tells us that:

  1. x_root -> y_root (could be opposite too)
  2. x_root and y_root are connected. (they could be disconnected)

So the main problem beside ambiguous direction, is also that not every node in a directed graph is connected to each other.

sam
  • 13
  • 4