Pagini recente » Cod sursa (job #2903811) | Cod sursa (job #227759) | Cod sursa (job #893505) | Cod sursa (job #730397) | Cod sursa (job #1423351)
#include <iostream>
#include <fstream>
#include <vector>
#define NMax 100005
using namespace std;
ifstream g("cerere.in");
ofstream f("cerere.out");
vector <int> V[NMax];
int N,M,x,y,S,varf;
int Stiva[NMax],sol[NMax],K[NMax],I[NMax];
void DFS(int x)
{
Stiva[++varf]=x;
if(K[x]==0)
sol[x]=0;
else
sol[x]=1+sol[Stiva[varf-K[x]]];
for(int i=0;i<V[x].size();i++)
DFS(V[x][i]);
--varf;
}
int main()
{
g>>N;
for(int i=1;i<=N;i++)
g>>K[i];
for(int i=1;i<N;i++)
{
g>>x>>y;
V[x].push_back(y);
++I[y];
}
for(int i=1;i<=N;i++)
if(!I[i])
{
S=i;
break;
}
DFS(S);
for(int i=1;i<=N;i++)
f<<sol[i]<<' ';
}