Cod sursa(job #159415)

Utilizator paul9iTermure Paul Mihai paul9i Data 14 martie 2008 09:30:42
Problema Pioni Scor 100
Compilator cpp Status done
Runda Arhiva de probleme Marime 1.75 kb
    #include<stdio.h>  
    #define nargy 1;  
   #define fumeanu 2;  
    FILE *f,*g;  
    long i,n,m,t,gr[20001],*v[20001],w[20001],pw,np,p[30001],j;  
    void citire();  
    void win(long n1);  
    void solve();  
    void afisare();  
   int main()  
   {  
       citire();  
       for(i=1;i<=n;i++) win(i);  
       for(;t;t--)  
       { solve();  
         afisare();  
       }  
       fclose(f);return 0;  
   }  
   void citire()  
   {       long x,y;  
       f=fopen("pioni.in","r");g=fopen("pioni.out","w");  
       fscanf(f,"%ld%ld%ld",&t,&n,&m);  
       for(i=1;i<=m;i++){fscanf(f,"%ld%ld",&x,&y);gr[x]++;}  
       fclose(f);  
       for(i=1;i<=n;i++){v[i]=new long [gr[i]+2];gr[i]=0;}  
       f=fopen("pioni.in","r");  
       fscanf(f,"%ld%ld%ld",&t,&n,&m);  
       for(i=1;i<=m;i++){fscanf(f,"%ld%ld",&x,&y);v[x][++gr[x]]=y;}  
   }  
   void win(long n1)  
   {       long nv,jj,n2;  
       if(w[n1])return;  
       nv=gr[n1];  
       for(jj=1;jj<=nv;jj++)  
       {  n2=v[n1][jj];  
          win(n2);  
          if(w[n2]==2)  
          { w[n1]=1;return;}  
       }  
       w[n1]=2;  
   }  
   void solve()  
  {       pw=0;  
       fscanf(f,"%ld",&np);  
       for(i=1;i<=np;i++)  
       { fscanf(f,"%ld",&p[i]);  
         if(w[p[i]]==1)pw++;  
       }  
   }  
   void afisare()  
   {  
       if(!pw){fprintf(g,"Fumeanu\n");return;}  
       fprintf(g,"Nargy\n");  
       fprintf(g,"%ld",pw);  
       for(i=1;i<=np;i++)  
        if(w[p[i]]==1)  
        { fprintf(g," %ld",p[i]);  
          for(j=1;;j++)  
          {  
            if(w[v[p[i]][j]]==2)  
            { fprintf(g," %ld",v[p[i]][j]);break;}  
          }  
        }  
       fprintf(g,"\n");  
   }