Pagini recente » Cod sursa (job #3194238) | Cod sursa (job #2250613) | Cod sursa (job #2895996) | Cod sursa (job #2762297) | Cod sursa (job #1201274)
using namespace std;
#include <fstream>
#include <vector>
ifstream fin("cerere.in");
ofstream fout("cerere.out");
const int Nmax = 100000;
int k[Nmax+1];
int dist[Nmax+1];
int areTata[Nmax+1];
int st[Nmax+1], vf;
bool uz[Nmax+1];
vector<int> v[Nmax+1];
void DFS(int) ;
int main()
{
int i, n, a, b;
fin >> n;
for(i = 1; i <= n; ++i) fin >> k[i];
for(i = 1; i < n; ++i)
{
fin >> a >> b;
v[a].push_back(b);
areTata[b] = 1;
}
for(i = 1; i <= n; ++i)
if(!areTata[i])
{
vf = 0;
DFS(i);
}
for(i = 1; i <= n; ++i) fout << dist[i] << ' ';
return 0;
}
void DFS(int nod)
{
vector<int>::iterator it;
uz[nod] = 1; st[vf] = nod;
while(vf >= 0)
{
nod = st[vf];
for(it = v[nod].begin(); it != v[nod].end(); ++it)
if(!uz[*it])
{
uz[*it] = 1;
st[++vf] = *it;
if(k[*it]) dist[*it] = 1 + dist[ st[ vf - k[ *it ] ] ];
DFS(*it);
}
--vf;
}
}