Cod sursa(job #63440)

Utilizator goguGogu Marian gogu Data 28 mai 2007 17:43:34
Problema Balanta Scor 100
Compilator cpp Status done
Runda Arhiva de probleme Marime 1.54 kb
#include <stdio.h>
#include <string.h>

#define Nmax 1100

int greu[Nmax], usor[Nmax], A[Nmax], B[Nmax], tmp[Nmax];

int main()
 {
  freopen("balanta.in","r",stdin);
  freopen("balanta.out","w",stdout);

  int n,i,j,m,rez;

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

  for(i=1;i<=n;++i)
   greu[i] = usor[i] = 1;

  for(j=m;j>0;--j)
   {
    scanf("%d",&m);
    for(i=1;i<=m;++i)
     scanf("%d",A+i);
    for(i=1;i<=m;++i)
     scanf("%d",B+i);
    scanf("%d",&rez);

    if(rez == 0)
     {
      //daca sunt egale toate
      for(i=1;i<=m;++i)
       usor[A[i]] = usor[B[i]] = 0;
      for(i=1;i<=m;++i)
       greu[A[i]] = greu[B[i]] = 0;
     }
      else
    if(rez == 1)
     {
      //daca A este mai greu
      memset(tmp,0,sizeof(tmp));
      for(i=1;i<=m;++i)
       tmp[A[i]] = 1;
      for(i=1;i<=n;++i)
       greu[i] &= tmp[i];
      memset(tmp,0,sizeof(tmp));
      for(i=1;i<=m;++i)
       tmp[B[i]] = 1;
      for(i=1;i<=n;++i)
       usor[i] &= tmp[i];
     }
      else
    if(rez == 2)
     {
      //daca B este mai greu
      memset(tmp,0,sizeof(tmp));
      for(i=1;i<=m;++i)
       tmp[B[i]] = 1;
      for(i=1;i<=n;++i)
       greu[i] &= tmp[i];
      memset(tmp,0,sizeof(tmp));
      for(i=1;i<=m;++i)
       tmp[A[i]] = 1;
      for(i=1;i<=n;++i)
       usor[i] &= tmp[i];
     }
   }

  int Q = 0;

  for(i=1;i<=n;++i)
    Q += usor[i] + greu[i];

  if(Q < 3)
   {
    for(i=1;i<=n;++i)
     if(usor[i] || greu[i])
      printf("%d\n", i);
   }
    else
   printf("0\n");

  return 0;
 }