Pagini recente » Cod sursa (job #303092) | Cod sursa (job #371231) | Cod sursa (job #2025005) | Cod sursa (job #43437) | Cod sursa (job #2476147)
#include <iostream>
#include <fstream>
#include <vector>
#include <deque>
const int NMAX = 100001;
int tata[NMAX];
int nr[NMAX],n;
int d[NMAX],cate[NMAX];
int stram[NMAX][30];
std::vector<int>v[NMAX];
std::deque<int>path;
std::ifstream in("cerere.in");
std::ofstream out("cerere.out");
void dfs(int nod){
if(nr[nod]==0);
else
d[nod]=d[path[path.size()-nr[nod]]]+1;
path.push_back(nod);
for(int x:v[nod])
dfs(x);
path.pop_back();
}
int main(){
long long suma=0;
in>>n;
for(int i=1;i<=n;i++)
in>>nr[i],tata[i]=i;
for(int i=1,a,b;i<n;i++)
in>>a>>b,v[a].push_back(b),suma+=b;
long long nr=1LL*(n+1)*n/2-suma;
dfs(nr);
for(int i=1;i<=n;i++)
out<<d[i]<<" ";
return 0;
}