Într-un arbore cu rădăcină, spunem că rădăcina este pe nivelul 1
, fiii rădăcinii pe nivelul 2
, fiii fiilor rădăcinii pe nivelul 3
, etc. Numărul de nivele distincte din arbore determină înălțimea arborelui.
Cerința
Se dă vectorul de tați al unui arbore cu rădăcină cu n
noduri. Determinați înălțimea arborelui.
Date de intrare
Fișierul de intrare inaltime.in
conține pe prima linie numărul de noduri n
. Pe linia următoare se află vectorul de tați al arborelui, valorile fiind separate prin spații.
Date de ieșire
Fișierul de ieșire inaltime.out
va conține pe prima linie numărul H
, reprezentând înălțimea arborelui.
Restricții și precizări
1 ≤ n ≤ 100
- în vectorul de tați rădăcina este marcată cu
0
Exemplu
inaltime.in
7 4 1 7 0 7 7 1
inaltime.out
4
#include <bits/stdc++.h> using namespace std; ifstream cin("inaltime.in"); ofstream cout("inaltime.out"); vector <int> G[101]; int n , p , x , y , k , T[102] , P[101] , q , d[101] , maxi; void dfs(int x) { P[x] = 1; for(auto i:G[x]) if(!P[i]) { d[i] = d[x] + 1; dfs(i); } } int main() { cin >> n; for(int i = 1 ; i <= n ; i++) { cin >> T[i]; if(T[i] != 0) { G[T[i]].push_back(i); G[i].push_back(T[i]); } if(T[i] == 0) p = i; } dfs(p); for(int i = 1 ; i <= n ; i++) maxi = max(maxi , d[i]); cout << maxi + 1; }