Pagini recente » Cod sursa (job #825976) | Cod sursa (job #1968347) | Cod sursa (job #4821) | Cod sursa (job #1331373) | Cod sursa (job #2136176)
#include <vector>
#include <algorithm>
#include <fstream>
#define nmax 100005
using namespace std;
ifstream f("cerere.in");
ofstream g("cerere.out");
vector<int>Q[nmax],stk;
int n,stramos[nmax],tata[nmax],intel[nmax],ceamaiinteligenta;
void read()
{
f>>n;
for (int i=1; i<=n; ++i)
f>>stramos[i];
for (int i=1; i<n; ++i)
{
int a,b;
f>>a>>b;
Q[a].push_back(b);
tata[b]=a;
}
}
void dfs(int nod)
{
stk.push_back(nod);
for (auto w:Q[nod])
{
if (stramos[w])
intel[w]=intel[stk[stk.size()-stramos[w]]]+1;
dfs(w);
}
stk.pop_back();
}
void solve()
{
for (int i=1; i<=n; ++i)
if (!tata[i])
ceamaiinteligenta=i;
dfs(ceamaiinteligenta);
for (int i=1; i<=n; ++i)
g<<intel[i]<<' ';
}
int main()
{
read();
solve();
return 0;
}