Pagini recente » Cod sursa (job #2254032) | Cod sursa (job #1049628) | Cod sursa (job #486241) | Cod sursa (job #1903418) | Cod sursa (job #1653600)
#include <iostream>
#include <fstream>
#include <cstdio>
#include <vector>
#define nmax 100005
using namespace std;
//ifstream f("cerere.in");
//ofstream g("cerere.out");
int gI[nmax],val[nmax],ord[nmax],n,x,contor,h,ord1[nmax];
vector <int> V[nmax];
void dfs(int nod){
ord[h]=nod;
h++;
if(!val[nod]){
ord1[nod]=0;
}else{
ord1[nod]=ord1[ord[h-val[nod]-1]]+1;
}
for(int i=0;i<V[nod].size();i++){
dfs(V[nod][i]);
}
h--;
}
int main()
{
FILE *f ,*g;
f=fopen("cerere.in","r");
g=fopen("cerere.out","w");
//f>>n;
fscanf(f,"%d",&n);
for(int i=1;i<=n;i++){
//f>>val[i];
fscanf(f,"%d",&val[i]);
}
int a,b;
for(int i=0;i<n-1;i++){
fscanf(f,"%d%d",&a,&b);
//f>>a>>b;
gI[b]=1;
V[a].push_back(b);
}
for(int i=1;i<=n;i++) if(!gI[i]) dfs(i);
for(int i=1;i<=n;i++) fprintf(g,"%d ",ord1[i]);
return 0;
}