Pagini recente » Cod sursa (job #2894596) | Cod sursa (job #2765357) | Cod sursa (job #2834494) | Cod sursa (job #1154220) | Cod sursa (job #1449133)
#include <fstream>
#include <vector>
using namespace std;
ifstream fin("cerere.in");
ofstream fout("cerere.out");
int N, K[100005];
int rad, grd[100005];
int ST[100005], sol[100005];
vector<int> V[100005];
void dfs(int nod)
{
for (vector<int>::iterator it = V[nod].begin(); it != V[nod].end(); ++it)
{
if (K[*it] == 0)
sol[*it] = 0;
else
sol[*it] = 1 + sol[ST[ST[0] - K[*it] + 1]];
ST[++ST[0]] = *it;
dfs(*it);
--ST[0];
}
}
int main()
{
fin >> N;
for (int i = 1; i <= N; ++i)
fin >> K[i];
for (int i = 1, nod1, nod2; i <= N - 1; ++i)
{
fin >> nod1 >> nod2;
V[nod1].push_back(nod2);
++grd[nod2];
}
for (int i = 1; i <= N; ++i)
if (grd[i] == 0)
{
rad = i;
break;
}
ST[++ST[0]] = rad;
dfs(rad);
for (int i = 1; i <= N; ++i)
fout << sol[i] << ' ';
fout << '\n';
fin.close();
fout.close();
return 0;
}