Pagini recente » Cod sursa (job #3178474) | Cod sursa (job #2140622) | Cod sursa (job #1020786) | Cod sursa (job #2613616) | Cod sursa (job #2142107)
#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[upd - w[node]] + 1;
for(int h = 0 ; h < g[node].size() ;h++){
dfs(g[node][h]);
}
upd--;
}
int spec[5 + nmax];
int main()
{
int n;
in>>n;
for(int i = 1 ; i <= n ;i++){
in>>w[i];
if(w[i] == 0)
spec[i] = 1;
}
for(int i = 1 ; i < n ;i++){
int a , b;
in>>a>>b;
g[a].push_back(b);
}
for(int i = 1 ; i <= n ;i++){
if(spec[i] == 1)
dfs(i);
}
for(int i = 1 ;i <= n ;i++){
out<<dp[i]<<" ";
}
return 0;
}