Pagini recente » Cod sursa (job #2694128) | Cod sursa (job #2767618) | Cod sursa (job #1535144) | Cod sursa (job #2358914) | Cod sursa (job #2916760)
#include <iostream>
#include <fstream>
#include <vector>
using namespace std;
void dfs(int nod,int *a, vector<vector<int>>& v,vector<int>& stiva,int *rez)
{
// 1 -> 2 -> 3 -> 4
// 0 1 1 1
if (a[nod] == 0) {
rez[nod] = 0;
} else {
rez[nod] = rez[stiva[stiva.size() - a[nod]]] + 1;
}
stiva.push_back(nod);
for (int i = 0; i < v[nod].size(); i++)
{
dfs(v[nod][i],a,v,stiva,rez);
}
stiva.pop_back();
}
int main()
{
ifstream in("cerere.in");
ofstream out("cerere.out");
int n;
in >> n;
int a[n],maimute[n] = {0},m,rez[n];
vector <vector<int>> v(n+1);
for (int i = 0; i < n; i++)
{
in >> a[i];
}
for (int i = 0; i < n-1; i++)
{
int aux1, aux2;
in >> aux1 >> aux2;
aux1--;
aux2--;
maimute[aux2]++;
v[aux1].push_back(aux2);
}
for (int i = 0; i < n; i++)
{
if (maimute[i] == 0)
{
m = i;
}
}
vector<int> stiva;
dfs(m,a,v,stiva,rez);
for (int i = 0; i < n; i++)
{
out << rez[i] << " ";
}
in.close();
out.close();
return 0;
}