Pagini recente » Cod sursa (job #2404783) | Cod sursa (job #2838680) | Cod sursa (job #1916054) | Cod sursa (job #562080) | Cod sursa (job #1452137)
#include <fstream>
#include <vector>
#define dim 100001
using namespace std;
ifstream fin("cerere.in");
ofstream fout("cerere.out");
bool viz[dim],Grade[dim];
int lvl[dim],sol[dim],K[dim],n,i,a,b,root;
vector <int> G[dim];
void dfs(int node,int level)
{
viz[node]=1;
if(K[node]==0)
lvl[level]=0;
else
lvl[level]=lvl[level-K[node]]+1;
sol[node]=lvl[level];
for(vector<int> :: iterator it=G[node].begin();it!=G[node].end();it++)
{
if(viz[*it]==0)
dfs(*it,level+1);
}
}
int main()
{
fin>>n;
for(i=1;i<=n;i++)
fin>>K[i];
for(i=1;i<n;i++)
{
fin>>a>>b;
G[a].push_back(b);
Grade[b]=1;
}
for(i=1;i<=n;i++)
if(Grade[i]==0)
{
root=i;
break;
}
dfs(root,1);
for(i=1;i<=n;i++)
fout<<sol[i]<<" ";
return 0;
}