Pagini recente » Cod sursa (job #2683022) | Cod sursa (job #1131863) | Cod sursa (job #2373144) | Cod sursa (job #1621536) | Cod sursa (job #2986733)
//Ilie Dumitru
#include<cstdio>
#include<vector>
const int NMAX=100005;
int N, M;
int v[NMAX], stiva[NMAX], nrSteps[NMAX], areTata[NMAX];
std::vector<int> fii[NMAX];
void dfs(int node, int depth=0)
{
std::vector<int>::iterator i0, i1;
stiva[depth]=node;
if(v[node]!=0)
nrSteps[node]=nrSteps[stiva[depth-v[node]]]+1;
for(i0=fii[node].begin(), i1=fii[node].end();i0!=i1;++i0)
dfs(*i0, depth+1);
}
int main()
{
FILE* f=fopen("cerere.in", "r"), *g=fopen("cerere.out", "w");
int i, a, b;
fscanf(f, "%d", &N);
for(i=0;i<N;++i)
fscanf(f, "%d", v+i);
for(i=1;i<N;++i)
{
fscanf(f, "%d%d", &a, &b);
fii[a-1].push_back(--b);
areTata[b]=1;
}
for(i=0;i<N && areTata[i];++i);
a=i;
dfs(a);
for(i=0;i<N;++i)
fprintf(g, "%d ", nrSteps[i]);
fprintf(g, "\n");
fclose(f);
fclose(g);
return 0;
}