Pagini recente » Cod sursa (job #2932755) | Cod sursa (job #707322) | Cod sursa (job #3143377) | Cod sursa (job #234753) | Cod sursa (job #361993)
Cod sursa(job #361993)
#include<fstream.h>
#include<vector>
#define Nmax 100010
using namespace std;
vector <int> A[Nmax];
int S[Nmax], K[Nmax], G[Nmax], VIZ[Nmax];
int i, n , x, y;
void DFS(int k, int niv){
int j;
VIZ[k] = 1;
S[niv] = k;
if (K[k] == 0) G[k] = 0;
else G[k] = G[ S[ niv- K[k] ] ] + 1;
for (j = 0 ; j < A[k].size() ; j++)
if (VIZ[ A[k][j] ] == 0)
DFS(A[k][j], niv + 1);
}
int main(){
FILE *f = fopen("cerere.in", "r");
FILE *g = fopen("cerere.out", "w");
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);
}
DFS(1,1);
for (i = 1 ; i <= n ; i++)
fprintf(g, "%d ", G[i]);
fclose(f);
fclose(g);
return 0;
}