Pagini recente » Cod sursa (job #465828) | Cod sursa (job #2485029) | Cod sursa (job #2444985) | Cod sursa (job #881618) | Cod sursa (job #773455)
Cod sursa(job #773455)
#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;
if ( N==1 )
{
G>>"0\n";
return 0;
}
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';
}