Cod sursa(job #138218)

Utilizator marinMari n marin Data 17 februarie 2008 23:05:05
Problema Stramosi Scor 100
Compilator cpp Status done
Runda Arhiva de probleme Marime 1.42 kb
#include <stdio.h>
#define DIM 250001



struct nod {
  int v;
  nod *urm;
};

struct cer {
  int poz;
  int str;
  cer *urm;
};


//int k[DIM];
char t[DIM];
int n,i,r,x,y,m,aa,bb;
int s[DIM];
int rez[350000];
nod *p[DIM],*q;
cer *u[DIM],*qq;


void parc(int x, int niv){
  nod *q;
  s[niv]=x;


  qq=u[x];
  while (qq!=NULL) {
    if (qq->str<niv){
      rez[qq->poz]=s[niv-qq->str];
    } else {
      rez[qq->poz]=0;
    }
    qq=qq->urm;
  }


/*  if (k[x]==0) {
    rez[x]=0;
  } else {
    if (s[niv-k[x]]>0)
      rez[x]=s[niv-k[x]];
    else
      rez[x]=0;
  }*/
  q=p[x];
  while (q!=NULL) {
//    if ()
    parc(q->v, niv+1);
    q=q->urm;
  }
}


int main(){
  FILE *f = fopen("stramosi.in","r");
  fscanf(f,"%d %d",&n,&m);
  for (i=1;i<=n;i++){
    p[i]=NULL;
    u[i]=NULL;
  }
  for (i=1;i<=n;i++){
    fscanf(f,"%d",&y);
    if (y!=0) {
      t[i]=1;
      q=new nod;
      q->v=i;
      q->urm=p[y];
      p[y]=q;
    }
  }

  for (i=1;i<=m;i++) {
    fscanf(f,"%d %d",&aa,&bb);
    qq=new cer;
    qq->poz=i;
    qq->str=bb;
    qq->urm=u[aa];
    u[aa]=qq;
  }


  for (i=1;i<=n;i++)
    if (t[i]==0) {
      parc(i,1);
      r=i;
    }


  fclose(f);
/*  for (i=1;i<=n;i++)
    t[i]==0;*/

//  parc(r,1);

  FILE *g = fopen("stramosi.out","w");
  for (i=1;i<=m;i++){
    fprintf(g,"%d\n",rez[i]);
  }
  fclose(g);

  return 0;
}