Cod sursa(job #25398)

Utilizator raula_sanChis Raoul raula_san Data 4 martie 2007 12:27:14
Problema Balanta Scor 100
Compilator cpp Status done
Runda preONI 2007, Runda 3, Clasa a 10-a Marime 4.97 kb
#include <cstdio>

#define dim 1024

int A[dim][dim], C[dim], R[dim], Good[dim];
int N, M;

int main()
{
    freopen("balanta.in", "r", stdin);
    freopen("balanta.out", "w", stdout);
    
	scanf("%d %d", &N, &M);
    
    int i, j, k;
    
    for(i=0; i<M; ++i)
    {
             scanf("%d", C+i);
             
             for(j=0; j<(C[i]<<1); ++j)
                      scanf("%d", &A[i][j]);
             
             scanf("%d", R+i);
             
             if( !R[i] )
                 for(j=0; j<(C[i]<<1); ++j)
                          Good[ A[i][j] ] = 1;
    }             
    
    for(i=0; i<M; ++i)
    {             
             if( R[i] )
             {
                 int good = 0, m, found;
                 
                 for(j=0; j<(C[i]<<1); ++j)
                 {
                          good += Good[ A[i][j] ];
                          
                          if( !Good[ A[i][j] ] )
                              m = A[i][j];
                 }
                 
                 if( good == ((C[i]<<1)-1) )
                 {
                     printf("%d", m);
                     return 0;
                 }
                 
                 else if( C[i] == 1 )
                 {
                     for(j=0; j<M; ++j)
                              if( i != j )
                              {
                                if( R[j] == 1 )
                                {
                                  found = 0;
                                  
                                  for(k=0; k<C[j]; ++k)
                                           if( A[j][k] == A[i][0] || A[j][k] == A[i][1] )
                                               ++ found;
                                               
                                  if( found == 2 )
                                  {
                                      if( R[i] == 1 )
                                          printf("%d", A[i][0]);
                                      if( R[i] == 2 )
                                          printf("%d", A[i][1]);
                                  
                                      return 0;
                                  }
                                  
                                  found = 0;
                                  
                                  for(k=C[j]; k<(C[j]<<1); ++k)
                                              if( A[j][k] == A[i][0] || A[j][k] == A[i][1] )
                                                  ++ found;
                                  
                                  if( found == 2 )
                                  {
                                      if( R[i] == 1 )
                                          printf("%d", A[i][1]);
                                      if( R[i] == 2 )
                                          printf("%d", A[i][0]);
                                      
                                      return 0;
                                  }
                                }
                                else if( R[j] == 2 )
                                {                                  
                                  found = 0;
                                  
                                  for(k=0; k<C[j]; ++k)
                                           if( A[j][k] == A[i][0] || A[j][k] == A[i][1] )
                                               ++ found;
                                               
                                  if( found == 2 )
                                  {
                                      if( R[i] == 1 )
                                          printf("%d", A[i][1]);
                                      if( R[i] == 2 )
                                          printf("%d", A[i][0]);
                                  
                                      return 0;
                                  }
                                  
                                  found = 0;
                                  
                                  for(k=C[j]; k<(C[j]<<1); ++k)
                                              if( A[j][k] == A[i][0] || A[j][k] == A[i][1] )
                                                  ++ found;
                                  
                                  if( found == 2 )
                                  {
                                      if( R[i] == 1 )
                                          printf("%d", A[i][0]);
                                      if( R[i] == 2 )
                                          printf("%d", A[i][1]);
                                      
                                      return 0;
                                  }
                                }
                              }
                 }
             }
    }

    printf("0");
    
    fclose(stdin);
    fclose(stdout);
    
    return 0;
}