Pagini recente » Cod sursa (job #144685) | Cod sursa (job #2623787) | Cod sursa (job #70720) | Cod sursa (job #2528600) | Cod sursa (job #1053696)
#include<stdio.h>
#include<vector>
using namespace std;
FILE*f = fopen("cerere.in", "r");
FILE*g = fopen("cerere.out", "w");
vector <int> v[100001];
int sol[100001], k, n, x, y, w[100001], j, s[100001], i;
char viz[100001];
void dfs(int nod, int niv){
s[niv] = nod;
if (w[nod])
sol[nod] = sol[s[niv - w[nod]]] + 1;
else
sol[nod] = 0;
for (int i = 0; i<v[nod].size(); ++i)
dfs(v[nod][i], niv + 1);
}
int main() {
fscanf(f, "%d", &n);
for (i = 1; i <= n; ++i)
fscanf(f, "%d", &w[i]);
for (i = 1; i<n; ++i){
fscanf(f, "%d%d", &x, &y);
v[x].push_back(y);
viz[y] = 1;
}
for (i = 1; i <= n; ++i)
if (viz[i] == 0){
dfs(i, 1);
break;
}
for (i = 1; i <= n; ++i)
fprintf(g, "%d ", sol[i]);
fclose(g);
fclose(f);
return 0;
}