Pagini recente » Cod sursa (job #1414542) | Cod sursa (job #1429285) | Cod sursa (job #1091815) | Cod sursa (job #2535350) | Cod sursa (job #854208)
Cod sursa(job #854208)
#include<fstream>
#include<vector>
using namespace std;
#define nmax 100005
long i, n, v[nmax], nr[nmax], st[nmax], sf, a, b, r, nod, x;
vector <long> ma[nmax];
vector <long> ::iterator it[nmax];
bool ff[nmax];
ifstream f("cerere.in");
ofstream g("cerere.out");
void citire()
{
f>>n;
for (i=1;i<=n;i++)
f>>v[i];
for (i=1;i<=n-1;i++)
{
f>>a>>b;
ma[a].push_back(b);
ff[b]=1;
}
for (i=1;i<=n;i++)
{
if (!ff[i])
r=i;
it[i]=ma[i].begin();
}
}
void rezolvare()
{
st[++sf]=r;
while (sf)
{
nod=st[sf];
if (it[nod]!=ma[nod].end())
{
x=*it[nod]; it[nod]++;
st[++sf]=x;
if (v[x]>0)
nr[x]=nr[st[sf-v[x]]]+1;
}
else
sf--;
}
}
int main()
{
citire();
rezolvare();
for (i=1;i<=n;i++)
g<<nr[i]<<' ';
return 0;
}