Pagini recente » Cod sursa (job #2748901) | Cod sursa (job #2714388) | Cod sursa (job #1646571) | Cod sursa (job #715993) | Cod sursa (job #361998)
Cod sursa(job #361998)
#include<fstream.h>
#include<vector>
#define Nmax 100010
using namespace std;
vector <int> A[Nmax];
int S[Nmax], K[Nmax], G[Nmax], VIZ[Nmax], Vf[Nmax];
int i, n , x, y, start;
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);
Vf[y] = 1;
A[x].push_back(y);
}
for (i = 1 ; i <= n ; i++) if (!Vf[i]) start = i;
DFS(start,1);
for (i = 1 ; i <= n ; i++)
fprintf(g, "%d ", G[i]);
fclose(f);
fclose(g);
return 0;
}