Pagini recente » Cod sursa (job #245688) | Cod sursa (job #2470126) | Cod sursa (job #2151398) | Cod sursa (job #2464907) | Cod sursa (job #3219230)
#include <bits/stdc++.h>
using namespace std;
ifstream in ("cerere.in");
ofstream out ("cerere.out");
const int NMAX=100005;
int n;
int k[NMAX];
int x,y;
vector <int> v[NMAX];
bitset <NMAX> fr;
int stramos[NMAX];
int fin[NMAX];
void dfs(int nod, int pas)
{
stramos[pas]=nod;
if(k[nod])
{
fin[nod]=1+fin[stramos[pas-k[nod]]];
}
for(int i=0; i<v[nod].size(); i++)
{
dfs(v[nod][i],pas+1);
}
}
int main()
{
in>>n;
for(int i=1; i<=n; i++)
{
in>>k[i];
}
for(int i=1; i<n; i++)
{
in>>x>>y;
fr[y]=true;
v[x].push_back(y);
}
for(int i=1; i<=n; i++)
{
if(!fr[i])
{
dfs(i,1);
break;
}
}
for(int i=1;i<=n;i++)
{
out<<fin[i]<<" ";
}
return 0;
}