Cerința
Se dă vectorul de tați al unui arbore cu rădăcină cu n
noduri și un nod k
. Fiecare nod al arborelui are asociată o valoare numerică întreagă. Determinați suma valorilor asociate nodurilor din subarborele cu rădăcina în k
.
Date de intrare
Fișierul de intrare subarbore2.in
conține pe prima linie numărul de noduri n
și nodul k
. Pe a doua linie se află vectorul de tați al arborelui, valorile fiind separate prin spații. Pe linia a treia se află, în ordine, valorile asociate nodurilor din arbore.
Date de ieșire
Fișierul de ieșire subarbore2.out
va conține pe prima linie valoarea cerută.
Restricții și precizări
1 ≤ n ≤ 100
1 ≤ k ≤ n
- în vectorul de tați rădăcina este marcată cu
0
- valorile asociate nodurilor din arbore sunt numere întregi din intervalul
[-1000,1000]
Exemplu
subarbore2.in
8 4 4 3 0 3 2 1 4 1 -3 -2 4 4 0 -3 3 2
subarbore2.out
3
#include <bits/stdc++.h> using namespace std; ifstream cin("subarbore2.in"); ofstream cout("subarbore2.out"); int n , k , t[101] , val[101] , s; int main() { cin >> n >> k; for(int i = 1 ; i <= n ; i++) cin >> t[i]; for(int i = 1 ; i <= n ; i++) cin >> val[i]; s += val[k]; for(int i = 1 ; i <= n ; i++) { int ok = 0; int p = t[i]; while(p) { if(p == k)ok = 1; p = t[p]; } if(ok) s += val[i]; } cout << s; return 0; }