Pagini recente » Cod sursa (job #2699746) | Cod sursa (job #192542) | Cod sursa (job #3260244) | Cod sursa (job #33546) | Cod sursa (job #2205589)
#include <fstream>
#include <vector>
using namespace std;
ifstream cin ("cerere.in");
ofstream cout ("cerere.out");
vector <int> a[100001] ;
int n, m, vf, v[100001], rasp[100001], st[100001], t[100001] ;
bool viz[100001] ;
void dfs(int x)
{
st[++vf] = x ;
if(v[x] == 0) {
rasp[x] = 0 ;
}
else
rasp[x] = rasp[st[vf - v[x]]] + 1 ;
int y ;
viz[x] = true ;
for(int i = 0 ; i < a[x].size() ; i++)
{
y = a[x][i] ;
if(!viz[y])
dfs(y) ;
}
vf-- ;
}
int main()
{
int x, y ;
cin >> n ;
for(int j = 1 ; j <= n ; j++) {
cin >> v[j] ;
}
for(int j = 1 ; j < n ; j++)
{
cin >> x >> y ;
t[y] = x ;
a[x].push_back(y) ;
}
for(int i = 1 ; i <= n ; i++)
if(t[i] == 0 )
{
dfs(i) ;
break ;
}
for(int j = 1 ; j <= n ; j++)
cout << rasp[j] <<' ' ;
return 0 ;
}