Cod sursa(job #712802)

Utilizator ion824Ion Ureche ion824 Data 13 martie 2012 20:10:02
Problema Cerere Scor 50
Compilator cpp Status done
Runda Arhiva de probleme Marime 1.35 kb
#include<cstdio>
#define nmax 100005

typedef struct Lnod{
               int v;
               struct Lnod *next;
               }*nod;
nod a[nmax];  
int nr[nmax],rs[nmax],n,k,i;          

void readdata(){
     freopen("cerere.in","r",stdin);
     int x,y; nod p;
     scanf("%d\n",&n);
     for(int i=1;i<=n;++i)scanf("%d ",&nr[i]);
     while(!feof(stdin)){
                    scanf("%d %d\n",&x,&y);
                    p = new Lnod;
                    p->v=x;
                    p->next=a[y];
                    a[y]=p;
                    }
     fclose(stdin);               
     }

void scrie(){
    freopen("cerere.out","w",stdout);
    for(int i=1;i<=n;++i)printf("%d ",rs[i]);
    fclose(stdout);     
     }

void bfs(int nod1){
     nod p;
     
     if(k==0){
              if(!nr[nod1])rs[i]++;
                else { 
                     k=nr[nod1];
                     rs[i]++;                    
                     }
              }
      if(k){
            for(p=a[nod1]; p; p=p->next){ k--; bfs(p->v); }
            }                  
     }

int main(void){
    readdata();
    for(i=1;i<=n;++i)
               if(nr[i]){
                         k=nr[i];
                         bfs(i);
                        }
               else rs[i]=0;                       
    scrie();
   return 0; 
}