Pagini recente » Cod sursa (job #2289667) | Cod sursa (job #184582) | Cod sursa (job #691380) | Cod sursa (job #1962153) | Cod sursa (job #3224844)
#include <bits/stdc++.h>
#define MAXN 100000
using namespace std;
vector <int> v[MAXN + 1];
int val[MAXN + 1];
int s[MAXN + 1];
int k[MAXN + 1];
int r[MAXN + 1];
void dfs(int node, int nivel){
s[nivel] = node;
if(k[node] == 0)
r[node] = 0;
else
r[node] = r[s[nivel - k[node]]] + 1;
for( auto &i : v[node] ){
dfs(i, nivel + 1);
}
}
int main(){
FILE *fin, *fout;
int n, i, x, y;
fin = fopen( "cerere.in", "r" );
fscanf(fin, "%d", &n);
for( i = 1; i <= n; i++ )
fscanf( fin, "%d", &k[i] );
for( i = 0; i < n; i++ ){
fscanf(fin, "%d%d", &x, &y);
v[x].push_back(y);
val[y] = x;
}
i = 1;
while( i <= n && val[i] != 0)
i++;
//cout << i;
dfs(i, 1);
fclose( fin );
fout = fopen( "cerere.out", "w" );
for( i = 1; i <= n; i++ ){
fprintf(fout, "%d ", r[i]);
}
fclose( fout );
return 0;
}