Pagini recente » Cod sursa (job #2830309) | Cod sursa (job #3175605) | Cod sursa (job #689354) | Cod sursa (job #442165) | Cod sursa (job #406458)
Cod sursa(job #406458)
#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 dfs(int nod)
{
int i,poz,q;
if(k[nod]!=0)
{
q=nod;
poz=k[nod];
while(poz!=0)
{
q=t[q];
poz--;
}
sol[nod]=sol[q]+1;
}
else
sol[nod]=0;
for(i=0;i<g[nod].size();i++)
dfs(g[nod][i]);
}
void scrie()
{
int i;
ofstream fout("cerere.out");
for(i=1;i<=n;i++)
fout<<sol[i]<<' ';
fout.close();
}
int main ()
{
citire ();
dfs(1);
scrie();
return 0;
}