Cod sursa(job #811427)

Utilizator SmarandaMaria Pandele Smaranda Data 12 noiembrie 2012 10:43:47
Problema Balanta Scor 100
Compilator cpp Status done
Runda Arhiva de probleme Marime 2.44 kb
#include <cstdio>
#include <set>
#define NMAX 1026

using namespace std;

set <long> Greu , Usor;
long St [NMAX];
long Dr [NMAX];
long inter [NMAX];

int main () {
    long n , m , i , j , r , k , Greu_size , Usor_size;

    freopen ("balanta.in" , "r" , stdin);
    freopen ("balanta.out" , "w" , stdout);

    scanf ("%ld%ld" , &n , &m);
    for (i = 1 ; i <= n ; i ++) {
        Greu.insert (i);
        Usor.insert (i);
    }
    for (i = 1 ; i <= n ; i ++) {
        scanf ("%ld" , &k);
        for (j = 1 ; j <= k ;j ++)
            scanf ("%ld" , &St[j]);
        for (j = 1 ; j <= k ;j ++)
            scanf ("%ld" , &Dr[j]);
        scanf ("%ld" , &r);
        if (r == 0)
            for (j = 1 ; j <= k ; j ++) {
                Greu.erase (St[j]);
                Usor.erase (St[j]);
                Greu.erase (Dr[j]);
                Usor.erase (Dr[j]);
            }
        if (r==1) {
            inter [0] = 0;
            for (j = 1 ; j <= k ; j ++)
                if (Greu.find (St [j]) != Greu.end ())
                    inter [++ inter [0]] = St[j];
            Greu.clear ();
            for (j = 1 ; j <= inter [0] ; j ++)
                Greu.insert (inter [j]);

            inter [0] = 0;
            for (j = 1 ; j <= k ; j ++)
                if (Usor.find (Dr [j])!= Usor.end ())
                    inter [++ inter [0]] = Dr[j];
            Usor.clear ();
            for (j = 1 ; j <= inter [0] ; j ++)
                Usor.insert (inter [j]);
        }
        if (r==2) {
            inter [0] = 0;
            for (j = 1 ; j <= k ; j ++)
                if (Greu.find (Dr [j]) != Greu.end ())
                    inter [++ inter [0]] = Dr[j];
            Greu.clear ();
            for (j = 1 ; j <= inter [0] ; j ++)
                Greu.insert (inter [j]);

            inter [0] = 0;
            for (j = 1 ; j <= k ; j ++)
                if (Usor.find (St [j]) != Usor.end ())
                    inter [++ inter [0]] = St[j];
            Usor.clear ();
            for (j = 1 ; j <= inter [0] ; j ++)
                Usor.insert (inter [j]);
        }
    }
    Greu_size = Greu.size ();
    Usor_size = Usor.size ();
    if (Greu_size + Usor_size >= 2  || Greu_size + Usor_size == 0)
        printf ("0\n");
    else {
        if (Greu_size == 1)
            printf ("%ld\n" , (*Greu.begin ()));
        else printf ("%ld\n" , (*Usor.begin ()));
    }
    return 0;
}