Pagini recente » Cod sursa (job #371332) | Cod sursa (job #2444957) | Cod sursa (job #1707967) | Cod sursa (job #1344325) | Cod sursa (job #2158374)
#include<bits/stdc++.h>
#define NMAX 100010
using namespace std;
#define DIM 10000
char buff[DIM];
int poz=0;
void read(int &numar)
{
numar = 0;
while (buff[poz] < '0' || buff[poz] > '9')
if (++poz == DIM)
fread(buff,1,DIM,stdin),poz=0;
while ('0'<=buff[poz] && buff[poz]<='9')
{
numar = numar*10 + buff[poz] - '0';
if (++poz == DIM)
fread(buff,1,DIM,stdin),poz=0;
}
}
int n,start;
vector<int>V[NMAX];
int D[NMAX], k[NMAX], a[NMAX];
void DFS(int x, int h) {
if (!k[x]) a[h]=-1;
D[x] = a[h-k[x]]+1;
a[h]=D[x];
for (int i=0; i<V[x].size(); i++)
DFS(V[x][i],h+1);
}
int main() {
ios_base::sync_with_stdio(false); cin.tie(NULL);
freopen("cerere.in","r", stdin);
freopen("cerere.out","w",stdout);
read(n);
for (int i=1; i<=n; i++) {
read(k[i]);
}
for (int i=1; i<n; i++) {
int x,y; read(x); read(y);
V[x].push_back(y); D[y]++;
}
for (int i=1; i<=n; i++) {
if (!D[i]) start=i;
D[i]=0;
}
DFS(start,1);
for (int i=1; i<=n; i++) cout<<D[i]<<" ";
return 0;
}