Cod sursa(job #2711227)

Utilizator MihneaCadar101Cadar Mihnea MihneaCadar101 Data 23 februarie 2021 19:36:04
Problema Balanta Scor 100
Compilator cpp-64 Status done
Runda simulare_nr1 Marime 2.45 kb
#include <bits/stdc++.h>
using namespace std;
ifstream fin ("balanta.in");
ofstream fout("balanta.out");
struct elem {
    int k, r, jum1[1050], jum2[1050];
};

int n, m, aflat[1050];
elem v[1050];
int coin[1050];

bool cmp(elem a, elem b) {
    return a.k < b.k;
}

int main()
{
    fin >> n >> m;
    for (int i = 1; i <= m; ++i) {
        fin >> v[i].k;
        for (int j = 1; j <= v[i].k; ++j)
            fin >> v[i].jum1[j];

        for (int j = 1; j <= v[i].k; ++j)
            fin >> v[i].jum2[j];

        fin >> v[i].r;
    }

    sort(v + 1, v + 1 + m, cmp);

    for (int i = 1; i <= m; ++i) {
        if (v[i].r == 0) {
            for (int j = 1; j <= v[i].k; ++j) {
                coin[v[i].jum1[j]] = coin[v[i].jum2[j]] = 3;
            }

            continue;
        }
        else {
            memset(aflat, 0, sizeof(aflat));
            for (int j = 1; j <= v[i].k; ++j) {
                aflat[v[i].jum1[j]] = aflat[v[i].jum2[j]] = 1;
                if (coin[v[i].jum1[j]] == 0) {
                    if (v[i].r == 1)
                        coin[v[i].jum1[j]] = 1;
                    else
                        coin[v[i].jum1[j]] = 2;
                }
                else if (coin[v[i].jum1[j]] == 1) {
                    if (v[i].r == 2)
                        coin[v[i].jum1[j]] = 3;
                }
                else {
                    if (v[i].r == 1) {
                        coin[v[i].jum1[j]] = 3;
                    }
                }

                if (coin[v[i].jum2[j]] == 0) {
                    if (v[i].r == 2)
                        coin[v[i].jum2[j]] = 1;
                    else
                        coin[v[i].jum2[j]] = 2;
                }
                else if (coin[v[i].jum2[j]] == 1) {
                    if (v[i].r == 1)
                        coin[v[i].jum2[j]] = 3;
                }
                else {
                    if (v[i].r == 2) {
                        coin[v[i].jum2[j]] = 3;
                    }
                }
            }

            for (int i = 1; i <= n; ++i) {
                if (!aflat[i])
                    coin[i] = 3;
            }
        }
    }

    int nr = 0;
    for (int i = 1; i <= n; ++i) {
        if (coin[i] != 3) {
            if (nr) {
                nr = 0;
                break;
            }
            else nr = i;
        }
    }

    fout << nr;
    return 0;
}