Pagini recente » Cod sursa (job #522517) | Cod sursa (job #6014) | Cod sursa (job #2248912) | Cod sursa (job #1028822) | Cod sursa (job #830727)
Cod sursa(job #830727)
#include<fstream>
#include<vector>
#define DIM 100010
using namespace std;
int n , i , K[DIM],a,b;
ifstream f("cerere.in");
ofstream g("cerere.out");
vector<int>L[DIM];
int stack[DIM];
int k;
int Str[DIM],Sol[DIM];
void dfs(int x,int ant){
stack[++k]=ant;
if(K[x]==0)
Str[x]=0;
else
Str[x]=stack[k-K[x]+1];
for(unsigned int i=0;i<L[x].size();i++){
dfs(L[x][i],x);
k--;
}
}
int find_sol(int nod){
int k=0;
while(Str[nod]!=0){
nod=Str[nod];
k++;
}
return k;
}
int main(){
f>>n;
for(i=1;i<=n;i++)
f>>K[i];
for(i=1;i<n;i++){
f>>a>>b;
L[a].push_back(b);
}
dfs(1,0);
for(i=1;i<=n;i++){
Sol[i]=find_sol(i);
g<<Sol[i]<<" ";
}
return 0;
}