Cod sursa(job #1641508)

Utilizator depevladVlad Dumitru-Popescu depevlad Data 8 martie 2016 23:49:23
Problema Balanta Scor 90
Compilator cpp Status done
Runda Arhiva de probleme Marime 1.54 kb
#include <fstream>

using namespace std;

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

const int N = 1025;

int n, k;
int usor[N], greu[N];
int st[N], dr[N];

void update(int rez) {
    int i;
    if(rez == 0) {
        for(i = 1; i <= k; i++) {
            usor[st[i]] = greu[st[i]] = 0;
            usor[dr[i]] = greu[dr[i]] = 0;
        }
    }
    if(rez == 1) {
        for(i = 1; i <= k; i++) {
            greu[st[i]]++;
            usor[dr[i]]++;
        }
        for(i = 1; i <= n; i++) {
            usor[i] = (usor[i] == 2 ? 1 : 0);
            greu[i] = (greu[i] == 2 ? 1 : 0);
        }
    }
    if(rez == 2) {
        for(i = 1; i <= k; i++) {
            usor[st[i]]++;
            greu[dr[i]]++;
        }
        for(i = 1; i <= n; i++) {
            usor[i] = (usor[i] == 2 ? 1 : 0);
            greu[i] = (greu[i] == 2 ? 1 : 0);
        }
    }
}

int fnd() {
    int u, g, i;

    u = g = 0;
    for(i = 1; i <= n; i++) {
        if(usor[i] && !u) u = i;
        else if(usor[i] && u) return -1;

        if(greu[i] && !g) g = i;
        else if(greu[i] && g) return -1;
    }

    if(u && g) return -1;
    return (u == 0 ? g : u);
}

int main() {
    int m, i, v, rez;

    for(i = 1; i < N; i++) usor[i] = greu[i] = 1;

    in >> n >> m;
    while(m--) {
        in >> k;
        for(i = 1; i <= k; i++) in >> st[i];
        for(i = 1; i <= k; i++) in >> dr[i];
        in >> rez;
        update(rez);
    }

    rez = fnd();
    out << rez << '\n';

    return 0;
}