Pagini recente » Cod sursa (job #1151362) | Cod sursa (job #2352169) | Cod sursa (job #778955) | Cod sursa (job #874508) | Cod sursa (job #773452)
Cod sursa(job #773452)
#include <fstream>
#include <vector>
#define Nmax 100011
using namespace std;
int K[Nmax],N,Solve[Nmax],Dad[Nmax];
vector<int> Leg[Nmax];
int St[Nmax],Size,Nod;
void Get( int Nod )
{
St[++Size]=Nod;
Solve[Nod]=Solve[ St[ Size - K[Nod] ] ]+1;
for (int i=0;i< int( Leg[Nod].size() ) ;++i)
Get( Leg[Nod][i] );
St[Size--]=0;
}
ifstream F("cerere.in");
ofstream G("cerere.out");
int main()
{
F>>N;
for (int i=1;i<=N;++i)
{
F>>K[i];
if ( !K[i] )
Solve[ i ]=-1;
}
for (int i=1;i<=N;++i)
{
int x,y;
F>>x>>y;
Dad[y]=x;
Leg[x].push_back(y);
}
for (int i=1;i<=N;++i)
if ( !Dad[i] )
{
Nod=i;
break;
}
Get( Nod );
for (int i=1;i<=N;++i)
G<<Solve[i]<<' ';
G<<'\n';
}