Cod sursa(job #277260)

Utilizator RobytzzaIonescu Robert Marius Robytzza Data 11 martie 2009 16:48:06
Problema Cerere Scor 85
Compilator cpp Status done
Runda Arhiva de probleme Marime 1.26 kb
// DFS nu BFS !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!
#include <stdio.h>
#define lg_max 110000

struct nod
{
     int inf;
     nod *next;
}*sir[lg_max];

int tata[lg_max],cati[lg_max],pasi[lg_max];
int ord[lg_max];
int rad,n,nr;

void baga(int a,int b)
{
     nod *q=new nod;
     q->inf=b;
     q->next=sir[a];
     sir[a]=q;
}

void citire()
{
     int a,b;
     scanf ("%d",&n);
     for (int i=1;i<=n;i++)
          scanf ("%d",&cati[i]);

     for (int i=0;i<n;i++)
     {
          scanf ("%d %d",&a,&b);
          baga(a,b);
          tata[b]=a;
          pasi[i]=-1;
     }

     for (int i=1;i<=n;i++)
          if (tata[i]==0)
          {
               rad=i;
               return ;
          }
}


void df(int nodd)
{
     for (nod *q=sir[nodd];q;q=q->next)
     {
          ord[nr++]=q->inf;
          pasi[q->inf]=pasi[ord[nr-1-cati[q->inf]]]+1;
          df(q->inf);
          nr--;
     }
}

void afisare()
{
     for (int i=1;i<=n;i++)
          printf("%d ",pasi[i]);
     printf("\n");
}

int main ()
{
     freopen ("cerere.in","r",stdin);
     freopen ("cerere.out","w",stdout);
     citire();
     ord[0]=rad;
     pasi[rad]=0;
     nr=1;
     df(rad);
     afisare();
     return 0;
}