Pagini recente » Cod sursa (job #692313) | Cod sursa (job #573245) | Cod sursa (job #2303968) | Cod sursa (job #1906281) | Cod sursa (job #1231760)
#include <fstream>
#include <vector>
using namespace std;
ifstream fin("cerere.in");
ofstream fout("cerere.out");
const int nmax= 100000;
int n, k, root;
int st[nmax+1], v[nmax+1], sol[nmax+1], r[nmax+1];
vector <int> g[nmax+1];
void dfs( int x ) {
st[++k]= x;
if ( v[x]!=0 ) sol[x]= sol[st[k-v[x]]]+1;
for ( vector <int>::iterator it= g[x].begin(); it!=g[x].end(); ++it ) {
dfs(*it);
--k;
}
}
int main( ) {
fin>>n;
for ( int i= 1; i<=n; ++i ) {
fin>>v[i];
}
for ( int i= 1; i<=n-1; ++i ) {
int a, b;
fin>>a>>b;
g[a].push_back(b);
++r[b];
}
for ( int i= 1; i<=n; ++i )
if ( r[i]==0 ) root= i, i= n+1;
dfs(root);
for ( int i= 1; i<=n; ++i ) {
fout<<sol[i]<<" ";
}
fout<<"\n";
return 0;
}