Pagini recente » Cod sursa (job #1232566) | Cod sursa (job #1711593) | Cod sursa (job #250852) | Cod sursa (job #2143616) | Cod sursa (job #2142111)
#include <iostream>
#include <fstream>
#include <vector>
using namespace std;
ifstream in ("cerere.in");
ofstream out ("cerere.out");
int const nmax = 100000;
vector<int> g[5 + nmax];
int dp[5 + nmax];
int w[5 + nmax];
int up[5 + nmax];
int upd = 0;
void dfs(int node){
up[++upd] = node;
if(w[node] == 0)
dp[node] = 0;
else
dp[node] = dp[up[upd - w[node]]] + 1;
for(int h = 0 ; h < g[node].size() ;h++){
dfs(g[node][h]);
}
upd--;
}
int spec[5 + nmax];
int seen[5 + nmax];
int main()
{
int n;
in>>n;
for(int i = 1 ; i <= n ;i++){
in>>w[i];
}
for(int i = 1 ; i < n ;i++){
int a , b;
in>>a>>b;
g[a].push_back(b);
seen[b] = 1;
}
for(int i = 1 ; i <= n ;i++){
if(seen[i] == 0)
dfs(i);
}
for(int i = 1 ;i <= n ;i++){
out<<dp[i]<<" ";
}
return 0;
}