Pagini recente » Cod sursa (job #2966066) | Cod sursa (job #2488708) | Clasament cdib_6789 | Cod sursa (job #557869) | Cod sursa (job #605800)
Cod sursa(job #605800)
#include <fstream>
#include <assert.h>
#include <vector>
#define NMax 100010
using namespace std;
const char IN[]="cerere.in",OUT[]="cerere.out";
ifstream fin(IN); ofstream fout(OUT);
int N;
int a[NMax];
int T[NMax];
bool b[NMax];
vector<int> ad[NMax] ;
int v[NMax];
void dfs(int x=1,int niv=0)
{
v[niv]=x;
T[x]= a[x] ? T[v[niv-a[x]]]+1 : 0;
for (int i=0;i<(int)ad[x].size();++i)
dfs(ad[x][i],niv+1);
v[niv]=0;
}
int main()
{
int i,x,y;
fin>>N;
for (i=1;i<=N;++i) fin>>a[i];
for (i=1;i<N;++i)
fin>>x>>y,
ad[x].push_back(y),
b[y]=true;;
for (i=1;b[i];++i);
dfs(i);
for (i=1;i<=N;++i)
fout<<T[i]<<" ";
fout<<"\n";
return 0;
}