Cod sursa(job #2158476)

Utilizator DruffbaumPopescu Vlad Druffbaum Data 10 martie 2018 13:19:36
Problema Balanta Scor 100
Compilator cpp Status done
Runda Arhiva de probleme Marime 1.32 kb
#include <cstdio>

#define MAXN 1 << 10

bool g[MAXN + 1], u[MAXN + 1], s[MAXN + 1], d[MAXN + 1];

int main() {
  FILE *fin, *fout;
  int n, m, k, x, t, ans, cnt;
  fin = fopen("balanta.in", "r");
  fscanf(fin, "%d%d", &n, &m);
  for (int i = 1; i <= n; ++i) {
    g[i] = u[i] = 1;
  }
  for (int i = 0; i < m; ++i) {
    fscanf(fin, "%d", &k);
    for (int j = 1; j <= n; ++j) {
      s[j] = d[j] = 0;
    }
    for (int j = 0; j < k; ++j) {
      fscanf(fin, "%d", &x);
      s[x] = 1;
    }
    for (int j = 0; j < k; ++j) {
      fscanf(fin, "%d", &x);
      d[x] = 1;
    }
    fscanf(fin, "%d", &t);
    if (t == 1) {
      for (int j = 1; j <= n; ++j) {
        g[j] &= s[j];
        u[j] &= d[j];
      }
    } else if (t == 2) {
      for (int j = 1; j <= n; ++j) {
        g[j] &= d[j];
        u[j] &= s[j];
      }
    } else {
      for (int j = 1; j <= n; ++j) {
        if (s[j] || d[j]) {
          g[j] = u[j] = 0;
        }
      }
    }
  }
  fclose(fin);
  ans = cnt = 0;
  for (int i = 1; i <= n; ++i) {
    if (g[i]) {
      ++cnt;
      ans = i;
    }
    if (u[i]) {
      ++cnt;
      ans = i;
    }
  }
  fout = fopen("balanta.out", "w");
  if (cnt == 1) {
    fprintf(fout, "%d\n", ans);
  } else {
    fprintf(fout, "0\n");
  }
  fclose(fout);
  return 0;
}