public class DisjointSetOptimization{ public int[] Array; private int[] _rank; public int NotJoinedCount; public DisjointSetOptimization(int len){ NotJoinedCount = len; Array = Enumerable.Repeat(-1, len).ToArray(); _rank = Enumerable.Repeat(-1, len).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]++; } NotJoinedCount--; } }
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