Pagini recente » Cod sursa (job #2160220) | Cod sursa (job #2305133) | Cod sursa (job #2454316) | Cod sursa (job #2905833) | Cod sursa (job #508152)
Cod sursa(job #508152)
#include <fstream>
#include <vector>
using namespace std;
const char InFile[]="cerere.in";
const char OutFile[]="cerere.out";
const int MaxN=100111;
ifstream fin(InFile);
ofstream fout(OutFile);
int viz[MaxN],K[MaxN],N,x,y,depth,S[MaxN],T[MaxN];
vector<int> a[MaxN];
void dfs(int x)
{
S[++depth]=x;
if(K[x]!=0)
{
viz[x]=viz[S[depth-K[x]]]+1;
}
for(vector<int>::iterator it=a[x].begin();it!=a[x].end();++it)
{
dfs(*it);
}
S[--depth]=0;
}
int main()
{
fin>>N;
for(register int i=1;i<=N;++i)
{
fin>>K[i];
}
for(register int i=1;i<N;++i)
{
fin>>x>>y;
a[x].push_back(y);
T[y]=x;
}
fin.close();
for(register int i=1;i<=N;++i)
{
if(T[i]==0)
{
dfs(i);
break;
}
}
for(register int i=1;i<=N;++i)
{
fout<<viz[i]<<" ";
}
fout.close();
return 0;
}