Pagini recente » Cod sursa (job #1212287) | Cod sursa (job #3272270) | Cod sursa (job #512186) | Cod sursa (job #396248) | Cod sursa (job #830603)
Cod sursa(job #830603)
#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){
if(Str[nod]==0)
return 1;
if(Sol[nod]!=0)
return Sol[nod];
else
return (Sol[nod]=1+find_sol(Str[nod]));
}
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]-1<<" ";
}
return 0;
}