Pagini recente » Cod sursa (job #467825) | Cod sursa (job #1989579) | Cod sursa (job #2297909) | Cod sursa (job #1429701) | Cod sursa (job #980446)
Cod sursa(job #980446)
#include<stdio.h>
#include<vector>
#include<string.h>
using namespace std;
#define NMAX 100000
int n,sol[NMAX+5],st[NMAX+5],k[NMAX+5];
vector <int> graph[NMAX+5];
bool vis[NMAX+5];
void dfs (int v) {
int i;
st[++st[0]]=v;
vis[v]=1;
if(k[v])
sol[v]=sol[st[st[0]-k[v]]]+1;
for(i=0;i<graph[v].size();i++)
if(!vis[graph[v][i]])
dfs(graph[v][i]);
st[0]--;
}
int main() {
freopen("cerere.in","r",stdin);
freopen("cerere.out","w",stdout);
int i,a,b;
scanf("%d",&n);
for(i=1;i<=n;i++)
scanf("%d",&k[i]);
for(i=1;i<n;i++) {
scanf("%d%d",&a,&b);
graph[a].push_back(b);
vis[b]=1;
}
for(i=1;i<=n;i++)
if(!vis[i]) {
memset(vis,0,sizeof(vis));
dfs(i);
break;
}
for(i=1;i<=n;i++)
printf("%d ",sol[i]);
return 0;
}