Pagini recente » Cod sursa (job #2515534) | Cod sursa (job #1303830) | Cod sursa (job #1444542) | Cod sursa (job #1924046) | Cod sursa (job #535060)
Cod sursa(job #535060)
#include<fstream>
#include<vector>
using namespace std;
ifstream fin("cerere.in");
ofstream fout("cerere.out");
int n; int sum, k;
//int nr;
int t[100005];
vector<vector<int> > G;
vector<int> M;
void Read();
void Solve();
void DF( int x );
void Find( int x, int nod, int nr );
int main()
{
Read();
Solve();
fin.close();
fout.close();
return 0;
}
void Read()
{
fin >> n;
G.resize(n+1);
M.resize(n+1);
for( int i = 1; i <= n; ++i )
fin >> M[i];
int x, y;
while( fin >> x >> y )
G[x].push_back(y);
}
void Solve()
{
t[1] = 0;
DF(1);
for( int i = 1; i <= n; ++i )
{
k = i;
int nr = 0;
sum = 0;
while( M[k] != 0 )
{
Find( M[k], k, nr );
sum++;
}
fout << sum << ' ';
}
}
void DF( int x )
{
for( int i = 0; i < G[x].size(); ++i )
{
t[ G[x][i] ] = x;
DF( G[x][i] );
}
}
void Find( int x, int nod, int nr )
{
if( x == 0 )
{
k = nod;
return;
}
Find( x-1, t[nod], nr+1 );
//sum++;
}