Pagini recente » Cod sursa (job #2837367) | Cod sursa (job #1114207) | Cod sursa (job #1415263) | Cod sursa (job #2109480) | Cod sursa (job #474091)
Cod sursa(job #474091)
#include <fstream>
#include <vector>
using namespace std;
const int NMAX=100001;
int N,K[NMAX],Rad,s[NMAX],nr[NMAX];
bool u[NMAX];
vector<int> a[NMAX];
ifstream f("cerere.in");
ofstream g("cerere.out");
void df(int vf,int k){
u[vf]=true;
s[k]=vf;
if (K[vf]>0) nr[vf]=nr[s[k-K[vf]]]+1;
for (vector<int>::iterator it=a[vf].begin();it!=a[vf].end();++it)
if (!u[*it]) df(*it,k+1);
}
int main(){
int i,x,y;
f>>N;
for (i=1;i<=N;++i) f>>K[i];
for (i=1;i<N;++i){
f>>x>>y;
u[y]=true;
a[x].push_back(y);}
for (i=1;i<=N && !Rad;++i)
if (!u[i]) Rad=i;
memset(u,false,sizeof(u));
df(Rad,1);
for (i=1;i<=N;++i) g<<nr[i]<<' ';
return 0;
}