Pagini recente » Cod sursa (job #1980394) | Cod sursa (job #2500058) | Cod sursa (job #1198782) | Cod sursa (job #2590283) | Cod sursa (job #3206706)
#include <fstream>
#include <vector>
using namespace std;
int n,v[100001],k[100001],d[100001];
bool verif[100001];
vector<int>G[100001];
ifstream fin("cerere.in");
ofstream fout("cerere.out");
void dfs(int nod,int cnt){
v[cnt]=nod;
if(k[nod]==0)
d[nod]=0;
else{ /// ma duc in stramos
d[nod]=1+d[v[cnt-k[nod]]];
}
for(auto x : G[nod]){
/// ma duc in nodul x
dfs(x,cnt+1);
}
}
int main(){
fin>>n;
for(int i=1;i<=n;i++)
fin>>k[i];
for(int i=2;i<=n;i++){
int x,y; fin>>x>>y;
verif[y]=1; /// y nu e radacina
G[x].push_back(y);
}
int root = 0;
for(int i=1;i<=n;i++)
if(verif[i]==0){
root = i;
break;
}
dfs(root,1);
for(int i=1;i<=n;i++)
fout<<d[i]<<" ";
return 0;
}