Pagini recente » Cod sursa (job #1786181) | Cod sursa (job #2146693) | Cod sursa (job #3266752) | Cod sursa (job #2612474) | Cod sursa (job #3157125)
#include <fstream>
#include <vector>
using namespace std;
ifstream cin ("cerere.in");
ofstream cout ("cerere.out");
int stramosi[100001] , trimis[100001] , durata[100001];
vector <int> adiacenta[100001];
void DeterminareDurata (const int nod_actual)
{
stramosi[++stramosi[0]] = nod_actual;
if (trimis[nod_actual])
durata[nod_actual] = durata[stramosi[stramosi[0] - trimis[nod_actual]]] + 1;
for (auto nod_vecin : adiacenta[nod_actual])
DeterminareDurata(nod_vecin);
stramosi[0]--;
}
int main ()
{
int numar_noduri;
cin >> numar_noduri;
for (int indice = 1 ; indice <= numar_noduri ; indice++)
cin >> trimis[indice];
for (int indice = 1 , nod[2] ; indice < numar_noduri ; indice++)
{ cin >> nod[0] >> nod[1]; adiacenta[nod[0]].push_back(nod[1]); }
DeterminareDurata(1);
for (int indice = 1 ; indice <= numar_noduri ; indice++)
cout << durata[indice] << ' ';
cout.close(); cin.close();
return 0;
}