Pagini recente » Cod sursa (job #887388) | Cod sursa (job #920756) | Cod sursa (job #389474) | Cod sursa (job #2042447) | Cod sursa (job #406423)
Cod sursa(job #406423)
#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;
c[inc=sf=0]=nod;
viz[nod]=1;
while(inc<=sf)
{
x=c[inc];
if(k[x]!=0)
{
int 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;
}