import java.util.*; import java.lang.*; import java.io.*; class Codechef{ { // your code goes here int t=sc.nextInt(); while(t-->0){ int n=sc.nextInt(); ArrayList<ArrayList<Integer>> tree = new ArrayList<>(); for (int i = 0; i <= n; i++) { tree.add(new ArrayList<>()); } for (int child = 2; child <= n; child++) { int parent = sc.nextInt(); tree.get(parent).add(child); } ArrayList<Integer>l=new ArrayList<>(); ArrayList<Integer>r=new ArrayList<>(); l.add(1); // root : 1 for (int node = 1; node <= n; node++) { int count = tree.get(node).size(); if (count > 0) { l.add(count); } } int time=0; while (!l.isEmpty()) { ArrayList<Integer> r1 = new ArrayList<>(); for (int x : r) { if (x - 1 > 0) r1.add(x - 1); } r = r1; int max = l.get(0); l.remove(0); if (max - 1 > 0) r.add(max - 1); time++; } // while(!r.isEmpty()){ // Collections.sort(r); // for(int i=0;i<r.size();i++){ // if(r.get(i)-1==0){ // r.remove(i); // }else r.set(i,r.get(i)-1); // } // if(r.size()==0)break; // int max=r.get(r.size()-1); // if(r.get(r.size()-1)-1==0){ // r.remove(r.size()-1); // }else r.set(r.size()-1,max-1); // time++; // } while (!r.isEmpty()) { // sort ascending ArrayList<Integer> r1 = new ArrayList<>(); for (int x : r) { if (x - 1 > 0) { r1.add(x - 1); } } r = r1; if (r.isEmpty()) break; int lastIndex = r.size() - 1; int max = r.get(lastIndex); if (max - 1 > 0) { r.set(lastIndex, max - 1); } else { r.remove(lastIndex); } time++; } } } }
5 7 1 1 1 2 2 4 5 5 5 1 4 2 1 3 3 1 6 1 1 1 1 1
[[], [2, 3, 4], [5, 6], [], [7], [], [], []] 4 [[], [4], [], [], [5], [2, 3]] 4 [[], [2], []] 2 [[], [3], [], [2]] 3 [[], [2, 3, 4, 5, 6], [], [], [], [], []] 3