Pagini recente » Cod sursa (job #1029485) | Cod sursa (job #220165) | Cod sursa (job #849946) | Cod sursa (job #2740947) | Cod sursa (job #42268)
Cod sursa(job #42268)
#include <stdio.h>
#include <vector>
using namespace std;
#define MN (100001)
#define pb push_back
int N, n[MN], c[MN];
vector<int> g[MN];
int s[MN], stop;
int main()
{
int i, n1, n2;
freopen("cerere.in", "r", stdin);
freopen("cerere.out", "w", stdout);
scanf("%d", &N);
for(i = 0; i < N; ++i)
scanf("%d", &n[i]);
for(i = 0; i < N-1; ++i) {
scanf("%d %d", &n1, &n2); --n1; --n2;
g[n1].pb(n2);
++c[n2];
}
for(i = 0; i < N; ++i) if(c[i] == 0)
break;
memset(c, 0, sizeof(c));
for(s[stop++] = i; stop > 0; ) {
n1 = s[stop-1];
if(!c[n1]) {
c[n1] = c[s[stop-n[n1]-1]]+1;
n[n1] = 0;
} else if(n[n1] < g[n1].size())
s[stop++] = g[n1][n[n1]++];
else --stop;
}
for(i = 0; i < N; ++i)
printf("%d ", c[i]-1);
printf("\n");
return 0;
}