Pagini recente » Cod sursa (job #2628811) | Cod sursa (job #1647763) | Borderou de evaluare (job #1520797) | Cod sursa (job #2551493) | Cod sursa (job #535152)
Cod sursa(job #535152)
#include<fstream>
#include<vector>
using namespace std;
ifstream fin("cerere.in");
ofstream fout("cerere.out");
int n; int sum, k;
int t[100005];
int sol[100005];
int s[100005];
int M[100005];
void Read();
void Solve();
void Find( int x, int nod);
int main()
{
Read();
Solve();
fin.close();
fout.close();
return 0;
}
void Read()
{
fin >> n;
for( int i = 1; i <= n; ++i )
fin >> M[i];
int x, y;
while( fin >> x >> y )
t[y] = x;
}
void Solve()
{
for( int i = 1; i <= n; ++i )
{
k = i;
sum = 0;
int ok = 1;
while( M[k] != 0 && ok == 1 )
{
Find( M[k], k);
sum++;
if( s[k] )
{
sum = sum + sol[k];
ok = 0;
}
}
sol[i] = sum;
s[i] = true;
fout << sum << ' ';
}
}
void Find( int x, int nod )
{
if( x == 0 )
{
k = nod;
return;
}
Find( x-1, t[nod] );
}