# PBinfo #647 – Subarbore2 – Rezolvare C++

Sursa: Codul lui Andrei
Limbaj: C++
Autor rezolvare: Darius

## Enunț

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

## Cod sursă C++

```cpp
#include <iostream>
#include <fstream>
using namespace std;
ifstream fin("subarbore2.in");
ofstream fout("subarbore2.out");
int n , k , t[105], v[105] , sum[105];
void  dfs(int k)
{
	int s = v[k];
	for(int i = 1 ; i <= n ; ++i)
		if(t[i] == k)
		{
			dfs(i);
			s += sum[i];
		}
	sum[k] = s;
}
int main()
{
	fin >> n >> k;
	for(int i = 1 ; i <= n ; i ++)
		fin >> t[i];
	for(int i = 1 ; i <= n ; i ++)
		fin >> v[i];
	dfs(k);
	fout << sum[k];
	return 0;
}
```

## Resurse

- [Pagina originală](https://codulluiandrei.ro/rezolvari/pbinfo/647)
- [Sursa C++](https://codulluiandrei.ro/rezolvari/pbinfo/647/cod.cpp)
- [Sursa pe GitHub](https://raw.githubusercontent.com/codulluiandrei/pbinfo/main/pbinfo-647/main.cpp)
- [Cursuri de informatică pentru BAC](https://codulluiandrei.ro/academia/info-curs/pachet-cpp/)
