77public class CentroidDecomposition {
88 private List <Integer >[] tree ;
99 private List <Integer >[] centroidTree ;
10+ private int [] subtreeSizes ;
11+ private boolean [] visited ;
1012 private boolean [] centroidMarked ;
1113 private int [] centroidParent ;
1214 private int startingNode ;
@@ -19,6 +21,8 @@ public CentroidDecomposition(int n, int startingNode){
1921 N = n ;
2022 centroidMarked = new boolean [n ];
2123 centroidParent = new int [n ];
24+ subtreeSizes = new int [N ];
25+ visited = new boolean [N ];
2226 if (startingNode < 0 || startingNode > n -1 ){
2327 throw new IllegalArgumentException ("Starting node must be in range 0.." + (n - 1 ) + " but got " + startingNode );
2428 }
@@ -51,6 +55,10 @@ private void addEdgeCTree(int u, int v){
5155 centroidParent [v ] = u ;
5256 }
5357
58+ public int getParent (int v ){
59+ return centroidParent [v ];
60+ }
61+
5462 public void findSubtreeSizes (int src , boolean [] visited , int [] subtreeSizes ){
5563 // dfs traversal to find size of subtree rooted at src
5664 visited [src ] = true ;
@@ -65,8 +73,8 @@ public void findSubtreeSizes(int src, boolean[] visited, int[] subtreeSizes){
6573 }
6674
6775 public void findCentroid (int src , int previousCentroid ){
68- int [] subtreeSizes = new int [N ];
69- boolean [] visited = new boolean [N ];
76+ // int[] subtreeSizes = new int[N];
77+ // boolean[] visited = new boolean[N];
7078 Arrays .fill (visited , false );
7179
7280 findSubtreeSizes (src , visited , subtreeSizes );
0 commit comments