Pagini recente » Cod sursa (job #2572682) | Cod sursa (job #2269404) | Cod sursa (job #1811590) | Cod sursa (job #618668) | Cod sursa (job #502341)
Cod sursa(job #502341)
#include<fstream>
#include<list>
#define NMAX 100003
using namespace std;
ifstream f("cerere.in");
ofstream g("cerere.out");
list<int> a[NMAX];
int st, n, ns, k[NMAX], t[NMAX], s[NMAX], pp[NMAX];
struct coada
{
int nod, prec;
}c[NMAX];
void citeste()
{
int i, x, y;
f>>n;
for (i=1; i<=n; ++i) f>>k[i];
for (i=1; i<n; ++i)
{
f>>x>>y;
t[y]=x;
a[x].push_back(y);
}
for (i=1; i<=n; ++i)
if (t[i]==0) {st=i; break;}
}
void dfs(int nod)
{
list<int> :: iterator it;
s[++ns]=nod;pp[nod]=s[ns-k[nod]];
for (it=a[nod].begin(); it!=a[nod].end(); ++it)
dfs(*it);
--ns;
}
void solve()
{
int i, j, val;
for (i=1; i<=n; ++i)
{
j=pp[i];
if (j==i) val=0;
else
{
val=1;
while (k[j]!=0)
{
j=pp[j];
++val;
}
}
g<<val<<" ";
}
}
int main()
{
citeste();
dfs(st);
solve();
f.close();
g.close();
return 0;
}