Cod sursa(job #2772999)

Utilizator Linca_AmaliaLinca Mihaela Amalia Linca_Amalia Data 3 septembrie 2021 22:09:58
Problema Balanta Scor 60
Compilator cpp-64 Status done
Runda Arhiva de probleme Marime 2.55 kb
#include <fstream>
using namespace std;
ifstream fin("balanta.in");
ofstream fout("balanta.out");
int n, m, k, r, ok, ok2, sol, sol2, st[1050], dr[1050], H[1050], L[1050], f[1050];

int main(){
    fin >> n >> m;
    for (int i = 1; i <= n; i++){
        H[i] = 1;
        L[i] = 1;
    }
    for (int i = 1; i <= m; i++){
        fin >> k;
        for (int i = 1; i <= k; i++)
            fin >> st[i];
        for (int i = 1; i <= k; i++)
            fin >> dr[i];
        fin >> r;
        if ( r == 0 ){
           /// H - st - dr
           /// L - st - dr
            for (int i = 1; i <= k; i++)
                H[i] = 0;
            for (int i = 1; i <= k; i++)
                L[i] = 0;
        }
        if ( r == 1 ){
            /// H ∩ st
            /// L ∩ dr
            for (int i = 1; i <= n; i++)
                f[i] = 0;
            for (int i = 1; i <= k; i++)
                f[ st[i] ] = 1;
            for (int i = 1; i <= n; i++){
                if ( H[i] == 1 && f[i] == 1 )
                    H[i] = 1;
                else
                    H[i] = 0;
            }
            for (int i = 1; i <= n; i++)
                f[i] = 0;
            for (int i = 1; i <= k; i++)
                f[ dr[i] ] = 1;
            for (int i = 1; i <= n; i++){
                if ( L[i] == 1 && f[i] == 1 )
                    L[i] = 1;
                else
                    L[i] = 0;
            }
        }
        if ( r == 2 ){
            /// H ∩ dr
            /// L ∩ st
            for (int i = 1; i <= n; i++)
                f[i] = 0;
            for (int i = 1; i <= k; i++)
                f[ dr[i] ] = 1;
            for (int i = 1; i <= n; i++){
                if ( H[i] == 1 && f[i] == 1 )
                    H[i] = 1;
                else
                    H[i] = 0;
            }
            for (int i = 1; i <= n; i++)
                f[i] = 0;
            for (int i = 1; i <= k; i++)
                f[ st[i] ] = 1;
            for (int i = 1; i <= n; i++){
                if ( L[i] == 1 && f[i] == 1 )
                    L[i] = 1;
                else
                    L[i] = 0;
            }
        }
    }
    ok = 0;
    for (int i = 1; i <= n; i++){
        if ( H[i] == 1 ){
            ok++;
            sol = i;
        }
    }
    ok2 = 0;
    for ( int i = 1; i <= n; i++){
        if ( L[i] == 1 ){
            ok2++;
            sol2 = i;
        }
    }
    if ( ok + ok2 == 1 )
        fout << sol;
    else
        fout << 0;
    return 0;
}