Pagini recente » Cod sursa (job #2852919) | Cod sursa (job #1381561) | Cod sursa (job #697348) | Cod sursa (job #2456079) | Cod sursa (job #2309358)
#include <bits/stdc++.h>
#define N 100005
using namespace std;
ifstream fin("cerere.in") ;
ofstream fout("cerere.out") ;
vector<int> graf[N] ;
int p[N] , sol[N] , n , start ;
bool viz[N] , vaz[N] ;
vector<int> v;
void citire()
{
int i , x , y ;
fin >> n ;
for ( i = 1 ; i <= n ; i++ )
sol[i] = 1 ;
for ( i = 1 ; i <= n ; i++ )
{
fin >> p[i] ;
if ( p[i] == 0 )
sol[i] = 0 ;
}
for ( i = 1 ; i <= n ; i++ )
{
fin >> x >> y ;
vaz[y] = true ;
graf[x].push_back(y) ;
graf[y].push_back(x) ;
}
for ( i = 1 ; i <= n ; i++ )
if ( vaz[i] == 0 )
start = i ;
}
void dfs(int nod)
{
viz[nod] = 1 ;
v.push_back(nod) ;
for ( auto vec : graf[nod] )
if ( viz[vec] == 0 )
dfs(vec) ;
if ( sol[nod] != 0 )
sol[nod] = sol[v[v.size()-p[nod]-1]]+1 ;
v.pop_back() ;
}
int main()
{
citire() ;
dfs(start) ;
for ( int i = 1 ; i <= n ; i++ )
fout << sol[i] << " " ;
}