Pagini recente » Cod sursa (job #3263479) | Cod sursa (job #1880284) | Cod sursa (job #767317) | Cod sursa (job #3236972) | Cod sursa (job #1061371)
#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[nod] - i)
{
aux=str[aux];
i+=k[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;
}
}
}