Pagini recente » Cod sursa (job #2895719) | Cod sursa (job #3216982) | Cod sursa (job #1503866) | Cod sursa (job #2720681) | Cod sursa (job #3157126)
#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];
bool eliminat[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]); eliminat[nod[1]] = true; }
int radacina = 1;
while (eliminat[radacina])
radacina++;
DeterminareDurata(radacina);
for (int indice = 1 ; indice <= numar_noduri ; indice++)
cout << durata[indice] << ' ';
cout.close(); cin.close();
return 0;
}