Well, I can definitely answer about linear time algorithms - BFS, DFS should work for all types of graphs (directed/undirected, cyclic/acyclic).
Think about it : starting with given node they will visit every edge and every node maximum once so they are not affected by cycle(s).
They will do it in a different fashion, BFS - "level-by-level", DFS - in a kinda greedy labyrinth-escaping manner, but they both will either terminate at some point (path exists), or after traversing all edges and visiting each node, they will terminate with negative result.
"Directivity" only affects what nodes are reachable from given node A, but implementation of algorithm(both bfs and dfs) is ignorant about whether graph directed or not.
I am not sure that union-find structure (your last item with disjoint sets) will help you in case of directed graphs.
Afaik, Union-find
will put (merge) nodes a
and b
in one set if they are mutually reachable, i.e. there is a path from both a
to b
and vice versa.
If you have edge a -> b
between a
and b
, and no other path leading from b
to a
, in that case according to Union-find data structure will not be able to put them not in one set.
,
but obviously path a
-> b
exists.