Pagini recente » Cod sursa (job #377320) | Cod sursa (job #1099805) | Cod sursa (job #1841187) | Cod sursa (job #1638461) | Cod sursa (job #1061377)
#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,niv[NMAX],nivel;
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:
niv[++nivel] = nod;
sol[nod] = 1 + sol[niv[nivel - k[nod]]];
for(int i=0;i<fiu[nod].size();i++)
{
dfs(fiu[nod][i]);
}
nivel--;
}
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;
}
}
}