Pagini recente » Cod sursa (job #760260) | Cod sursa (job #1163893) | Cod sursa (job #125349) | Cod sursa (job #655296) | Cod sursa (job #475789)
Cod sursa(job #475789)
#include <fstream>
#include <deque>
#include <vector>
using namespace std;
ifstream fin("cerere.in");
ofstream fout("cerere.out");
void Read();
void Solve();
void Df(int x);
void Write();
int n, beg;
int k[100001], t[100001];
int gi[100001];
vector<int> v[100001];
deque<int> st;
bool s[100001];
int main()
{
Read();
Solve();
Write();
}
void Read()
{
fin >> n;
for (int i = 1; i <= n; ++i)
fin >> k[i];
for (int i = 1, n1, n2; i < n; ++i)
{
fin >> n1 >> n2;
v[n1].push_back(n2);
++gi[n2];
}
fin.close();
}
void Solve()
{
for (int i = 1; i <= n; ++i)
if (gi[i] == 0)
{
beg = i;
break;
}
Df(beg);
}
void Df(int x)
{
st.push_back(x);
s[x] = true;
if (k[x] == 0) t[x] = 0;
else t[x] = t[st[st.size() - k[x] - 1]] + 1;
for (vector<int>::iterator it = v[x].begin(); it != v[x].end(); ++it)
if (s[*it] == false)
{
Df(*it);
}
st.pop_back();
}
void Write()
{
for (int i = 1; i <= n; ++i)
fout << t[i] << ' ';
fout.close();
}