Cod sursa(job #2728179)

Utilizator Alex_tz307Lorintz Alexandru Alex_tz307 Data 22 martie 2021 20:56:55
Problema Balanta Scor 100
Compilator cpp-64 Status done
Runda Arhiva de probleme Marime 1.78 kb
#include <bits/stdc++.h>

using namespace std;

ifstream fin("balanta.in");
ofstream fout("balanta.out");

const int NMAX = 1 << 10 | 1;
int a[2][NMAX];
bool fr_less[NMAX], fr_more[NMAX];

int main() {
  int N, M;
  fin >> N >> M;
  for (int i = 1; i <= N; ++i)
    fr_less[i] = fr_more[i] = true;
  for (int i = 0; i < M; ++i) {
    int K;
    fin >> K;
    for (int j = 0; j < 2; ++j)
      for (int k = 0; k < K; ++k)
        fin >> a[j][k];
    int rez;
    fin >> rez;
    if (rez == 0) {
      for (int j = 0; j < 2; ++j)
        for (int k = 0; k < K; ++k)
          fr_less[a[j][k]] = fr_more[a[j][k]] = false;
    } else if (rez == 1) {
      bool new_fr_less[NMAX] = {false}, new_fr_more[NMAX] = {false};
      for (int k = 0; k < K; ++k)
        if (fr_less[a[1][k]])
          new_fr_less[a[1][k]] = true;
      for (int k = 0; k < K; ++k)
        if (fr_more[a[0][k]])
          new_fr_more[a[0][k]] = true;
      for (int j = 1; j <= N; ++j)
        fr_less[j] = new_fr_less[j], fr_more[j] = new_fr_more[j];
    } else {
      bool new_fr_less[NMAX] = {false}, new_fr_more[NMAX] = {false};
      for (int k = 0; k < K; ++k)
        if (fr_less[a[0][k]])
          new_fr_less[a[0][k]] = true;
      for (int k = 0; k < K; ++k)
        if (fr_more[a[1][k]])
          new_fr_more[a[1][k]] = true;
      for (int j = 1; j <= N; ++j)
        fr_less[j] = new_fr_less[j], fr_more[j] = new_fr_more[j];
    }
  }
  vector<int> v1, v2;
  for (int i = 1; i <= N; ++i) {
    if (fr_less[i])
      v1.emplace_back(i);
    if (fr_more[i])
      v2.emplace_back(i);
  }
  if ((int)v1.size() == 1 && v2.empty())
    fout << v1[0] << '\n';
  else
    if ((int)v2.size() == 1 && v1.empty())
      fout << v2[0] << '\n';
  else
    fout << "0\n";
  return 0;
}