Cod sursa(job #3315497)

Utilizator BuzdiBuzdugan Rares Andrei Buzdi Data 14 octombrie 2025 13:13:13
Problema Balanta Scor 100
Compilator cpp-64 Status done
Runda Arhiva de probleme Marime 1.8 kb
#include <fstream>
#include <cmath>
#include <vector>
#include <algorithm>

using namespace std;

ifstream cin("balanta.in");
ofstream cout("balanta.out");

const int NMAX = 1024;

int n, m;
int v1[NMAX + 1], v2[NMAX + 1];
vector<int> big, small;

void make_diff(vector<int>& a, vector<int>& b) {
    vector<int> result;
    set_difference(a.begin(), a.end(), b.begin(), b.end(), back_inserter(result));
    swap(a, result);
}

void make_intersection(vector<int>& a, vector<int>& b) {
    vector<int> result;
    set_intersection(a.begin(), a.end(), b.begin(), b.end(), back_inserter(result));
    swap(a, result);
}

int main() {
    cin >> n >> m;

    small.resize(n);
    big.resize(n);
    for(int i = 0; i < n; i++) {
        small[i] = big[i] = i + 1;
    }

    for(int i = 1; i <= m; i++) {
        int k;
        cin >> k;

        vector<int> v1(k), v2(k);
        for(int j = 0; j < k; j++) {
            cin >> v1[j];
        }
        for(int j = 0; j < k; j++) {
            cin >> v2[j];
        }
        sort(v1.begin(), v1.end());
        sort(v2.begin(), v2.end());

        int which;
        cin >> which;
        if(which == 0) {
            make_diff(small, v1);
            make_diff(small, v2);
            make_diff(big, v1);
            make_diff(big, v2);
        }
        else if(which == 1) {
            make_intersection(big, v1);
            make_intersection(small, v2);
        }
        else {
            make_intersection(small, v1);
            make_intersection(big, v2);
        }
    }

    if(big.size() == 1 && small.size() == 0) {
        cout << big[0] << '\n';
    }
    else if(small.size() == 1 && big.size() == 0) {
        cout << small[0] << '\n';
    }
    else {
        cout << 0 << '\n';
    }
    return 0;
}