Pagini recente » Cod sursa (job #687452) | Cod sursa (job #3277781) | Cod sursa (job #414169) | Cod sursa (job #2306297) | Cod sursa (job #406577)
Cod sursa(job #406577)
#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],cnt,back[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];
}
fin.close ();
}
void dfs(int nod)
{
int i;
viz[nod]=1;
back[++cnt] = nod;
if(k[nod]==0)
{
sol[nod]=0;
}
else
{
sol[nod] = sol[back[cnt -k[nod]]] + 1;
}
for(i=0;i<g[i].size();i++)
if(!viz[g[nod][i]])
dfs(g[nod][i]);
cnt--;
}
void scrie()
{
int i;
ofstream fout("cerere.out");
for(i=1;i<=n;i++)
fout<<sol[i]<<' ';
fout.close();
}
int main ()
{
citire ();
int i;
for(i=1;i<=n;i++)
{
cnt=0;
if(!t[i])
dfs(i);
}
scrie();
return 0;
}