Pagini recente » Cod sursa (job #705497) | Cod sursa (job #2599830) | Cod sursa (job #2845404) | Cod sursa (job #3251192) | Cod sursa (job #2456017)
#include <fstream>
#include <vector>
using namespace std;
ifstream f("cerere.in");
ofstream g("cerere.out");
vector <int> graph[100001];
int st[100001], v[100001], i, n, a, b, k, tata[100001], d[100001];
void dfs(int node, int level){
st[level] = node;
d[node] = d[st[level - v[node]]] + 1;
for(int i = 0; i < graph[node].size(); i++)
dfs(graph[node][i], level + 1);
}
int main()
{ f >> n;
for(i = 1; i <= n; i++)
f >> v[i];
for(i = 1; i <= n - 1; i++){
f >> a >> b;
graph[a].push_back(b);
tata[b] = a;
}
for(i = 1; i <= n; i++)
if(tata[i] == 0){
k = i;
break;
}
d[k] = 0;
dfs(k, 1);
for(i = 1; i <= n; i++)
g << d[i] - 1 << ' ';
return 0;
}