Cod sursa(job #25340)

Utilizator crawlerPuni Andrei Paul crawler Data 4 martie 2007 12:04:47
Problema Balanta Scor 90
Compilator cpp Status done
Runda preONI 2007, Runda 3, Clasa a 10-a Marime 1.67 kb
#include <stdio.h>
#include <math.h>

#define fin "balanta.in"
#define fout "balanta.out"
#define FOR(i,a,b) for( i = (a) ; i <= (b) ; ++i )

int v[1025], st[513],dr[513];

int main()
 {
   freopen(fin,"r",stdin);
   freopen(fout,"w",stdout);

   int n,m,k,i,j,r;

   scanf("%i%i", &n,&m);

   FOR(i,1,m)
    {
     scanf("%i",&k);
     
     FOR(j,1,k)
      scanf("%i",&st[j]);

     FOR(j,1,k)
      scanf("%i",&dr[j]);

     scanf("%i",&r);

     if(r == 0)
      FOR(j,1,k)
       {
        v[st[j]] = -1;
        v[dr[j]] = -1;
       }
       
     if(r == 1)
      FOR(j,1,k)
       {
        if( ( v[st[j]] ) && ( v[st[j]] != 1) )
         v[st[j]] = -1;
          else
         v[st[j]] = 1;

        if( ( v[dr[j]] ) && ( v[dr[j]] != 2) )
         v[dr[j]] = -1;
          else
         v[dr[j]] = 2;
       }
       
     if(r == 2)
      FOR(j,1,k)
       {
        if( ( v[st[j]] ) && ( v[st[j]] != 2) )
         v[st[j]] = -1;
          else
         v[st[j]] = 2;

        if( ( v[dr[j]] ) && ( v[dr[j]] != 1) )
         v[dr[j]] = -1;
          else
         v[dr[j]] = 1;
       }
    }

   int fr[4];

   fr[0] = 0;
   fr[1] = 0;
   fr[2] = 0;


   FOR(i,1,n)
    if(v[i] >= 0)
     ++fr[v[i]];

   if(fr[1] == 1)
    FOR(i,1,n)
     if(v[i] == 1)
      {
       printf("%i\n", i);
       return 0;
      }

   if(fr[2] == 1)
    FOR(i,1,n)
     if(v[i] == 2)
      {
       printf("%i\n", i);
       return 0;
      }

   if(fr[0] == 1)
    FOR(i,1,n)
     if(v[i] == 0)
      {
       printf("%i\n", i);
       return 0;
      }


   printf("0\n");

   return 0;
 }

//by Crawler