Pagini recente » Cod sursa (job #295183) | Cod sursa (job #2511533) | Cod sursa (job #1811924) | Cod sursa (job #1687406) | Cod sursa (job #406436)
Cod sursa(job #406436)
#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 ();
}
void bfs (int nod)
{
int i,inc,sf,x,q,poz;
c[inc=sf=0]=nod;
viz[nod]=1;
while(inc<=sf)
{
x=c[inc];
if(k[x]!=0)
{
q=x;
poz=k[x];
while(poz!=0)
{
q=t[q];
poz--;
}
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;
}