Pagini recente » Cod sursa (job #2918369) | Cod sursa (job #2704610) | Cod sursa (job #1137017) | Cod sursa (job #600865) | Cod sursa (job #3139787)
#include <iostream>
#include <fstream>
#include <vector>
using namespace std;
const int N = 100000;
int cer[N+1];
vector <int> fii[N+1];
int drum[N+1];
int dp[N+1];
int tata[N+1];
int adanc = 0;
void dfs(int x){
drum[++adanc] = x;
int stramos = drum[adanc - cer[x]];
if(cer[x] == 0)
dp[x] = 0;
else
dp[x] = 1 + dp[stramos];
for(auto y: fii[x]){
dfs(y);
}
adanc--;
}
int main()
{
ifstream fin("cerere.in");
ofstream fout("cerere.out");
int n;
fin >> n;
for(int i = 1; i <= n; i++){
fin >> cer[i];
}
for(int i = 0; i < n - 1; i++){
int a, b;
fin >> a >> b;
fii[a].push_back(b);
tata[b] = a;
}
int rad = 1;
while(rad <= n && tata[rad]!=0){
rad++;
}
dfs(rad);
for(int i = 1; i <= n; i++){
fout << dp[i] << " ";
}
fin.close();
fout.close();
return 0;
}