Cod sursa(job #1330039)

Utilizator assa98Andrei Stanciu assa98 Data 30 ianuarie 2015 12:02:46
Problema Balanta Scor 30
Compilator cpp Status done
Runda Arhiva de probleme Marime 1.76 kb
#include <fstream>
#include <algorithm>
#include <vector>
#include <cstring>
using namespace std;

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

const int MAX_N = 1030;

int a[MAX_N][MAX_N];
bool viz[MAX_N];

int main() {
    int n, m;
    fin >> n >> m;
    for(int i = 1; i <= m; i++) {
        fin >> a[i][0];
        for(int j = 1; j <= 2 * a[i][0] + 1; j++) {
            fin >> a[i][j];
        }
    }

    for(int i = 1; i <= m; i++) {
        if(a[i][2 * a[i][0] + 1] == 0) {
            for(int j = 1; j <= 2 * a[i][0]; j++) {
                viz[a[i][j]] = true;
            }
        }
        else if(a[i][2 * a[i][0] + 1] == 1) {
            for(int j = 1; j <= a[i][0]; j++) {
                viz[a[i][j]] = true;
            }
        }
        else {
            for(int j = a[i][0] + 1; j <= 2 * a[i][0]; j++) {
                viz[a[i][j]] = true;
            }   
        }
    }

    int cat = 0;
    int val = 0;
    for(int i = 1; i <= n; i++) {
        if(!viz[i]) {
            cat++;
            val = i;
        }
    }
    
    memset(viz, 0, sizeof(viz));
    for(int i = 1; i <= m; i++) {
        if(a[i][2 * a[i][0] + 1] == 0) {
            for(int j = 1; j <= 2 * a[i][0]; j++) {
                viz[a[i][j]] = true;
            }
        }
        else if(a[i][2 * a[i][0] + 1] == 2) {
            for(int j = 1; j <= a[i][0]; j++) {
                viz[a[i][j]] = true;
            }
        }
        else {
            for(int j = a[i][0] + 1; j <= 2 * a[i][0]; j++) {
                viz[a[i][j]] = true;
            }   
        }
    }

    for(int i = 1; i <= n; i++) {
        if(!viz[i]) {
            cat++;
            val = i;
        }
    }
    if(cat == 1) {
        fout << val;
        return 0;
    }
    
    fout << 0;
    return 0;
}