Pagini recente » Cod sursa (job #1942789) | Cod sursa (job #3211680) | Cod sursa (job #803943) | Cod sursa (job #1856458) | Cod sursa (job #1131777)
#include <iostream>
#include <stdio.h>
#include <vector>
#define N 100001
using namespace std;
vector <int>Arb[N];
int tata[N], vaz[N];
void dfs (int nod)
{
int i;
for (i = 0; i < Arb[nod].size(); i++)
{
if (!vaz[Arb[nod][i]]){
vaz[Arb[nod][i]] = 1;
tata[Arb[nod][i]] = nod;
dfs(Arb[nod][i]);
}
}
}
int f(int nod, int nriteratii, int versor)
{
if ( nriteratii == versor ){
return nod;
} else {
f(tata[nod], nriteratii, versor+1);
}
}
int main()
{
freopen("cerere.in", "r", stdin);
freopen("cerere.out", "w", stdout);
int nr, i, j, salturi[N];
int x,y,nrpasi,aux;
scanf("%d", &nr);
for (i = 1; i <= nr; i++)
{
scanf ("%d", &salturi[i]);
}
for (i = 1; i <= nr; i++)
{
scanf ("%d%d", &x, &y);
Arb[x].push_back(y);
Arb[y].push_back(x);
}
vaz[1]=1;
dfs(1);
for (i = 1; i <= nr; i++)
{
nrpasi=0;
aux = f (i, salturi[i], 0);
if (salturi[i])
nrpasi++;
while ( salturi[aux] )
{
aux=f (aux,salturi[aux],0);
nrpasi++;
}
printf("%d ", nrpasi);
}
return 0;
}