Pagini recente » Cod sursa (job #1389547) | Cod sursa (job #1659200) | Cod sursa (job #2305746) | Cod sursa (job #61363) | Cod sursa (job #1540655)
#include <fstream>
#include <vector>
using namespace std;
ifstream fin ("cerere.in");
ofstream fout ("cerere.out");
int n, top, nod, rad, STR[100010], S[100010], NR[100010];
bool DAD[100010];
vector < int > V[100010];
int main()
{
fin >> n;
for (int i = 1; i <= n; i ++) fin >> STR[i];
for (int i = 1, a, b; i < n; i ++)
{
fin >> a >> b;
DAD[b] = true;
V[a].push_back(b);
}
for (int i = 1; i <= n; i ++)
{
if (!DAD[i])
{
rad = i;
break;
}
}
S[++top] = rad;
while (top)
{
if (!V[S[top]].empty())
{
nod = V[S[top]].back();
V[S[top]].pop_back();
S[++top] = nod;
if (STR[nod]) NR[nod] = NR[S[top - STR[nod]]] + 1;
}
else
{
top --;
}
}
for (int i = 1; i < n; i ++) fout << NR[i] << ' ';
fout << NR[n] << '\n';
fout.close();
return 0;
}