public class DisjointSet{
public int[] Array;
public DisjointSet(int[] array){
Array = array;
}
public int FindParent(int index){
if(Array[index] == -1){
return index;
}
return FindParent(Array[index]);
}
public void Union(int el1, int el2){
var el1Parent = FindParent(el1);
var el2Parent = FindParent(el2);
if(el1Parent != el2Parent){
Array[el1Parent] = el2Parent;
}
}
}
public class DisjointSetOptimization{
public int[] Array;
private int[] _rank;
public DisjointSetOptimization(int[] array){
Array = array;
_rank = Enumerable.Repeat(1, array.Length).ToArray();
}
public int FindParent(int index){
if(Array[index] == -1){
return index;
}
return Array[index] = FindParent(Array[index]);
}
public void Union(int el1, int el2){
var el1Parent = FindParent(el1);
var el2Parent = FindParent(el2);
if(el1Parent == el2Parent){
return;
}
if(_rank[el1Parent] > _rank[el2Parent]){
Array[el2Parent] = el1Parent;
} else if(_rank[el1Parent] < _rank[el2Parent]){
Array[el1Parent] = el2Parent;
} else {
Array[el2Parent] = el1Parent;
_rank[el1Parent]++;
}
}
}
Preview:
downloadDownload PNG
downloadDownload JPEG
downloadDownload SVG
Tip: You can change the style, width & colours of the snippet with the inspect tool before clicking Download!
Click to optimize width for Twitter