287
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 ≤ 1001 ≤ 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;
}
Comentarii