Pagini recente » Cod sursa (job #2187026) | Cod sursa (job #3247733) | Cod sursa (job #2865279) | Cod sursa (job #3178274) | Cod sursa (job #406403)
Cod sursa(job #406403)
#include<fstream>
#include<vector>
using namespace std;
#define nmax 100005
#define pb push_back
vector<int> g[nmax];
int k[nmax],sol[nmax],c[nmax],viz[nmax],t[nmax];
int n;
void citire ()
{
ifstream fin("cerere.in");
fin>>n;
int i,a,b;
for(i=1;i<=n;i++)
fin>>k[i];
for(i=1;i<n;i++)
{
fin>>a>>b;
g[a].pb(b);
t[b]=a;
}
fin.close ();
}
int tat(int nod,int poz)
{
if(poz==0) return nod;
else tat(t[nod],poz-1);
}
void bfs (int nod)
{
int i,inc,sf,x;
c[inc=sf=0]=nod;
viz[nod]=1;
while(inc<=sf)
{
x=c[inc];
if(k[x]!=0)
{
int q;
q=tat(x,k[x]);
sol[x]=sol[q]+1;
}
else
sol[x]=0;
inc++;
for(i=0;i<g[x].size();i++)
if(viz[g[x][i]]!=1)
viz[g[x][i]]=1,c[++sf]=g[x][i];
}
}
void scrie()
{
int i;
ofstream fout("cerere.out");
for(i=1;i<=n;i++)
fout<<sol[i]<<' ';
fout.close();
}
int main ()
{
citire ();
bfs(1);
scrie();
return 0;
}