@@ -301,11 +301,7 @@ function acyclic_coloring(g::AdjacencyGraph, order::AbstractOrder; postprocessin
301301 forbidden_colors = zeros (Int, nv)
302302 first_neighbor = fill ((0 , 0 ), nv) # at first no neighbors have been encountered
303303 first_visit_to_tree = fill ((0 , 0 ), ne)
304- forest = DisjointSets {Tuple{Int,Int}} ()
305- sizehint! (forest. intmap, ne)
306- sizehint! (forest. revmap, ne)
307- sizehint! (forest. internal. parents, ne)
308- sizehint! (forest. internal. ranks, ne)
304+ forest = Forest {Int} (ne)
309305 vertices_in_order = vertices (g, order)
310306
311307 for v in vertices_in_order
@@ -346,7 +342,7 @@ function acyclic_coloring(g::AdjacencyGraph, order::AbstractOrder; postprocessin
346342 end
347343
348344 # compress forest
349- for edge in forest. revmap
345+ for edge in keys ( forest. intmap)
350346 find_root! (forest, edge)
351347 end
352348 tree_set = TreeSet (forest, nb_vertices (g))
@@ -365,11 +361,10 @@ function _prevent_cycle!(
365361 # modified
366362 first_visit_to_tree:: AbstractVector{<:Tuple} ,
367363 forbidden_colors:: AbstractVector{<:Integer} ,
368- forest:: DisjointSets {<:Tuple{Int,Int} } ,
364+ forest:: Forest {<:Integer } ,
369365)
370366 wx = _sort (w, x)
371- root = find_root! (forest, wx) # edge wx belongs to the 2-colored tree T represented by edge "root"
372- id = forest. intmap[root] # ID of the representative edge "root" of a two-colored tree T.
367+ id = find_root! (forest, wx) # The edge wx belongs to the 2-colored tree T, represented by an edge with an integer ID
373368 (p, q) = first_visit_to_tree[id]
374369 if p != v # T is being visited from vertex v for the first time
375370 vw = _sort (v, w)
@@ -387,7 +382,7 @@ function _grow_star!(
387382 color:: AbstractVector{<:Integer} ,
388383 # modified
389384 first_neighbor:: AbstractVector{<:Tuple} ,
390- forest:: DisjointSets{Tuple{Int,Int} } ,
385+ forest:: Forest{<:Integer } ,
391386)
392387 vw = _sort (v, w)
393388 push! (forest, vw) # Create a new tree T_{vw} consisting only of edge vw
@@ -410,7 +405,7 @@ function _merge_trees!(
410405 w:: Integer ,
411406 x:: Integer ,
412407 # modified
413- forest:: DisjointSets{Tuple{Int,Int} } ,
408+ forest:: Forest{<:Integer } ,
414409)
415410 vw = _sort (v, w)
416411 wx = _sort (w, x)
@@ -436,12 +431,11 @@ struct TreeSet
436431 reverse_bfs_orders:: Vector{Vector{Tuple{Int,Int}}}
437432end
438433
439- function TreeSet (forest:: DisjointSets{Tuple{ Int,Int} } , nvertices:: Int )
440- # forest is a structure DisjointSets from DataStructures .jl
434+ function TreeSet (forest:: Forest{ Int} , nvertices:: Int )
435+ # Forest is a structure defined in forest .jl
441436 # - forest.intmap: a dictionary that maps an edge (i, j) to an integer k
442- # - forest.revmap: a dictionary that does the reverse of intmap, mapping an integer k to an edge (i, j)
443- # - forest.internal.ngroups: the number of trees in the forest
444- ntrees = forest. internal. ngroups
437+ # - forest.ntrees: the number of trees in the forest
438+ ntrees = forest. ntrees
445439
446440 # dictionary that maps a tree's root to the index of the tree
447441 roots = Dict {Int,Int} ()
@@ -451,12 +445,10 @@ function TreeSet(forest::DisjointSets{Tuple{Int,Int}}, nvertices::Int)
451445
452446 # counter of the number of roots found
453447 k = 0
454- for edge in forest. revmap
448+ for edge in keys ( forest. intmap)
455449 i, j = edge
456450 # forest has already been compressed so this doesn't change its state
457- # I wanted to use find_root but it is deprecated
458- root_edge = find_root! (forest, edge)
459- root = forest. intmap[root_edge]
451+ root = find_root! (forest, edge)
460452
461453 # Update roots
462454 if ! haskey (roots, root)
0 commit comments