Pagini recente » Cod sursa (job #1606040) | Cod sursa (job #2456918) | Cod sursa (job #1120828) | Cod sursa (job #973749) | Cod sursa (job #415631)
Cod sursa(job #415631)
#include <cstdio>
#include <vector>
using namespace std;
#define Nmax 100050
int K[Nmax], S[Nmax], viz[Nmax], sol[Nmax], n, i, x, y;
vector <int> A[Nmax];
void DFS(int nod, int niv) {
int i;
S[niv] = nod;
if (K[nod])
sol[nod] = sol[S[niv - K[nod]]] + 1;
for (i = 0; i < A[nod].size(); i++)
DFS(A[nod][i], niv + 1);
}
int main() {
FILE *f = fopen("cerere.in", "r");
fscanf(f, "%d", &n);
for (i = 1; i <= n; i++)
fscanf(f, "%d", &K[i]);
for (i = 1; i < n; i++) {
fscanf(f, "%d %d", &x, &y);
A[x].push_back(y);
viz[y] = 1;
}
fclose(f);
for (i = 1; i <= n; i++)
if (!viz[i])
DFS(i, 1);
FILE *g = fopen("cerere.out", "w");
for (i = 1; i <= n; i++)
fprintf(g, "%d ", sol[i]);
fclose(g);
return 0;
}