Pagini recente » Cod sursa (job #3260597) | Cod sursa (job #2139202) | Cod sursa (job #2570107) | Cod sursa (job #855722) | Cod sursa (job #1061375)
#include <fstream>
#include <vector>
using namespace std;
ifstream fin("cerere.in");
ofstream fout("cerere.out");
#define NMAX 100005
#define pb push_back
vector <int> fiu[NMAX];
int t[NMAX],n,m,sol[NMAX],k[NMAX],str[NMAX],rad;
bool check[NMAX];
void read()
{
int x,y;
fin>>n;
for(int i=1;i<=n;i++)
fin>>k[i];
for(int i=1;i<n;i++)
{
fin>>x>>y;
t[y]=x;
check[y]=true;
fiu[x].pb(y);
}
}
void dfs(int nod)
{
//stramosul nodului:
if(k[nod])
{
int aux=nod;
for(int i=1;i<=k[nod];i++)
{
aux=t[aux];
if(k[aux] && k[aux] + i <= k[nod])
{
i+=k[aux];
aux=str[aux];
}
}
str[nod] = aux;
sol[nod] = 1 + sol[aux];
}
for(int i=0;i<fiu[nod].size();i++)
{
dfs(fiu[nod][i]);
}
}
int main()
{
read();
for(int i=1;i<=n;i++)
{
if(check[i] == false)
{
dfs(i);
for(int i=1;i<=n;i++)
fout<<sol[i]<<" ";
return 0;
}
}
}