Pagini recente » Cod sursa (job #1182963) | Cod sursa (job #2048060) | Cod sursa (job #501289) | Cod sursa (job #3192093) | Cod sursa (job #1902978)
#include <fstream>
#include <vector>
#define manx 100001
using namespace std;
ifstream fin("cerere.in");
ofstream fout("cerere.out");
vector <int> g[manx];
int k[manx],stk[manx],sol[manx],it,n,viz[manx];
bool tata[manx];
void df(int node)
{
stk[++it]=node;
viz[node]=1;
if(k[node])
sol[node]=sol[stk[it - k[node]]] + 1;
int nr=g[node].size();
for(int i=0;i<nr;i++)
if(viz[g[node][i]]!=1)
df(g[node][i]);
it--;
}
int main()
{
fin>>n;
for(int i=1;i<=n;i++)
fin>>k[i];
for(int i=1;i<n;i++){
int a,b;
fin>>a>>b;
tata[b]=true;
g[a].push_back(b);
}
int i;
for(i=1;i<=n;i++)
if(!tata[i])
break;
df(i);
for(i=1;i<=n;i++)
fout<<sol[i]<<" ";
return 0;
}