Pagini recente » Cod sursa (job #2563867) | Cod sursa (job #113504) | Arhiva de probleme, pregatire pentru concursuri de informatica | Cod sursa (job #3146691) | Cod sursa (job #323878)
Cod sursa(job #323878)
#include <fstream>
#include <vector>
using namespace std;
ifstream f("cerere.in");
ofstream g("cerere.out");
int main()
{
int n,vf,i,j;
f>>n;
vector<int> viz(n+1,0), urm(n+1,0), p(n+1,0), s(n+1,0), k(n+1,0), tata(n+1,0);
for (i=1;i<=n;i++)
f>>k[i];
for (i=0;i<n-1;i++)
{
f>>j>>vf;
tata[vf]=j;
}
vf=0;
for (i=1;i<=n;i++)
if (tata[i]==0)
{
vf=i;
break;
}
s[1]=vf; urm[1]=0;
p[vf]=0;
vf=1;
while (vf>0)
{
i=s[vf];
j=urm[i]+1;
while (tata[j]!=i && j<=n)
j++;
if (j>n)
vf--;
else
{
urm[i]=j;
if (viz[j]==0)
{
viz[j]=1;
vf++;
s[vf]=j;
urm[j]=0;
if (k[j]==0)
p[j]=0;
else
p[j]=p[s[vf-k[j]]]+1;
}
}
}
for (i=1;i<n;i++)
g<<p[i]<<" ";
g<<p[n]<<"\n";
f.close();
g.close();
return 0;
}