Pagini recente » Cod sursa (job #2532204) | Cod sursa (job #2504739) | Cod sursa (job #590368) | Cod sursa (job #1351309) | Cod sursa (job #477452)
Cod sursa(job #477452)
#include<cstdio>
#include<vector>
#include<bitset>
using namespace std;
int n,i,rez[100009],k[100009],stiva[100009],nr;
vector<int> a[100009];
bitset<100009> fol;
bitset<100009>grad;
void dfs(int i)
{
fol[i]=1;
stiva[++nr]=i;
if(k[i]) rez[i]= rez[ stiva[nr-k[i]] ]+1;
for(int j=0;j<a[i].size();++j)
if(!fol[a[i][j]]) dfs(a[i][j]);
--nr;
}
int main()
{
freopen("cerere.in","r",stdin);
freopen("cerere.out","w",stdout);
scanf("%d",&n);
for(i=1;i<=n;++i)
scanf("%d",&k[i]);
for(i=1;i<n;++i)
{
int x,y;
scanf("%d%d",&x,&y);
a[x].push_back(y);
grad[y]=1;
}
for(i=1;i<=n;++i)
if(!fol[i]&&!grad[i]) dfs(i);
for(i=1;i<=n;++i) printf("%d ",rez[i]);
printf("\n");
fclose(stdin);
fclose(stdout);
return 0;
}