fork download
  1. #include <bits/stdc++.h>
  2. using namespace std;
  3.  
  4. typedef long long ll;
  5.  
  6. int main() {
  7. ll t;
  8. cin >> t;
  9.  
  10. while (t--) {
  11. ll n;
  12. cin >> n;
  13.  
  14. vector<ll> G[n + 1];
  15.  
  16. for (int i = 1; i <= n - 1; i++) {
  17. ll y;
  18. cin >> y;
  19. G[y].push_back(i);
  20. }
  21.  
  22. vector<ll> l, r;
  23.  
  24. for (int i = 1; i <= n; i++) {
  25. if (G[i].size() > 0)
  26. l.push_back(G[i].size());
  27. }
  28.  
  29. l.push_back(1);
  30. sort(l.begin(), l.end(), greater<ll>());
  31.  
  32. ll c = 0;
  33.  
  34. // FIRST STAGE
  35. while (!l.empty()) {
  36. sort(l.begin(), l.end(), greater<ll>());
  37.  
  38. // decrease all r by 1
  39. vector<ll> r1;
  40. for (ll x : r) {
  41. if (x - 1 > 0) r1.push_back(x - 1);
  42. }
  43. r = r1;
  44.  
  45. c++;
  46.  
  47. ll largest = l[0];
  48. l.erase(l.begin());
  49.  
  50. if (largest - 1 > 0)
  51. r.push_back(largest - 1);
  52. }
  53.  
  54. // SECOND STAGE
  55. while (!r.empty()) {
  56.  
  57. vector<ll> r1;
  58. for (ll x : r) {
  59. if (x - 1 > 0) r1.push_back(x - 1);
  60. }
  61. r = r1;
  62.  
  63. c++;
  64.  
  65. if (!r.empty()) {
  66. sort(r.begin(), r.end(), greater<ll>());
  67. r[0]--;
  68. if (r[0] == 0) r.erase(r.begin());
  69. }
  70. }
  71.  
  72. cout << c << endl;
  73. }
  74.  
  75. return 0;
  76. }
  77.  
Success #stdin #stdout 0s 5304KB
stdin
5
7
1 1 1 2 2 4
5
5 5 1 4
2
1
3
3 1
6
1 1 1 1 1
stdout
4
4
2
3
4