Pagini recente » Cod sursa (job #180659) | Cod sursa (job #2694565) | Cod sursa (job #2706259) | Cod sursa (job #1613155) | Cod sursa (job #1268659)
#include <fstream>
#include <vector>
using namespace std;
ifstream is("cerere.in");
ofstream os("cerere.out");
int n;
vector<int> k, v, t, answ;
vector<vector<int> > g;
void READ();
void SOLVE(int nod);
int main()
{
READ();
for ( int i = 1; i <= n; ++i )
if ( !t[i] )
{
SOLVE(i);
break;
}
for ( int i = 1; i <= n; ++i )
os << answ[i] << " ";
is.close();
os.close();
return 0;
}
void SOLVE(int nod)
{
v.push_back(nod);
if ( v.size() != 1 && k[nod] )
answ[nod] = answ[v[v.size() - 1 - k[nod]]] + 1;
for ( size_t i = 0; i < g[nod].size(); ++i )
SOLVE(g[nod][i]);
v.pop_back();
}
void READ()
{
int a, b;
is >> n;
k.resize(n + 1);
g.resize(n + 1);
t.resize(n + 1);
answ.resize(n + 1);
for ( int i = 1; i <= n; ++i )
is >> k[i];
for ( int i = 1; i < n; ++i )
{
is >> a >> b;
t[b] = a;
g[a].push_back(b);
}
}