Pagini recente » Monitorul de evaluare | Cod sursa (job #1001295) | Cod sursa (job #1268535) | Cod sursa (job #297860) | Cod sursa (job #3304046)
#include <fstream>
#include <vector>
using namespace std;
ifstream in("cerere.in");
ofstream out("cerere.out");
const int nmax = 1e5;
int n, a, b, monkey[nmax + 2];
vector <int> muchii[nmax + 2];
int dp[nmax + 2];
int dfsstack[nmax + 2], topp;
void dfs(int node, int father){
dfsstack[++topp] = node;
dp[node] = dp[dfsstack[topp - monkey[node]]] + 1;
for(auto nxt : muchii[node]){
if(nxt != father)
dfs(nxt, node);
}
dfsstack[topp--] = node;
}
int main(){
in>>n;
for(int i = 1; i <= n; i++)
in>>monkey[i];
for(int i = 1; i <= n - 1; i++){
in>>a>>b;
muchii[a].push_back(b);
muchii[b].push_back(a);
}
dfs(1, 0);
for(int i = 1; i <= n; i++)
out<<(dp[i] - 1)<<" "; out<<"\n";
return 0;
}