Cod sursa(job #2524555)

Utilizator eusebiu_alexandruMorar Eusebiu eusebiu_alexandru Data 15 ianuarie 2020 21:10:05
Problema Cerere Scor 100
Compilator cpp-64 Status done
Runda Arhiva de probleme Marime 1.15 kb
#include<fstream>
#define nmax 100009
using namespace std ;
ifstream f ("cerere.in");
ofstream g ("cerere.out");
int stiva[nmax],start[nmax],t[2][nmax],distanta[nmax],afisat[nmax],i,n,m,j,k,varf,element,vecin,coloana;
bool rad[nmax],vizitat[nmax];
int main()
{
  f>>n;
  for(i=1;i<=n;i++)
       f>>distanta[i];
 m=n-1;
 while(m)
 {
     m--;
     f>>i>>j;
     rad[j]=1;
     k++;
     t[0][k]=j;
     t[1][k]=start[i];
     start[i]=k;
 }
 for(i=1;i<=n;i++)
 {
    if(rad[i]==0)
    {
      afisat[i]=0;
      vizitat[i]=1;
      varf=1,stiva[varf]=i;
      while(varf)
      {
        element=stiva[varf];
        coloana=start[element];
        if(distanta[element]!=0)
        {
            afisat[element]=afisat[stiva[varf-distanta[element]]]+1;
        }
        int ok=1;
        while(coloana && ok==1)
        {
            vecin=t[0][coloana];
            if(vizitat[vecin]==0)
            {
                stiva[++varf]=vecin,vizitat[vecin]=1,ok=0;
            }
            coloana=t[1][coloana];
        }
        if(ok==1)
            varf--;
      }
    }
 }
 for(i=1;i<=n;i++)
     g<<afisat[i]<<" ";
}