Cod sursa(job #1594312)

Utilizator DysKodeTurturica Razvan DysKode Data 9 februarie 2016 13:44:36
Problema Balanta Scor 100
Compilator cpp Status done
Runda Arhiva de probleme Marime 1.8 kb
#include <fstream>
using namespace std;

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

int G[1025],U[1025],A[1025],B[1025],i,j,n,m,l,k;

void exclude( int A[], int B[], int n )
{
    int i;
    for( i = 1 ; i <= n ; i++ )
    {
        if( A[ B[ i ] ] == 1 )
            A[ B[ i ] ] = 0;
    }
}

void intersect( int A[], int B[], int n, int m )
{
    int i;
    for( i = 1 ; i <= m ; i++ )
        if( A[ B[ i ] ] == 1 )
            A[ B[ i ] ] = 2;

    for( i = 1 ; i <= n ; i++ )
        if( A[ i ] )
            A[ i ]--;
}

int siz( int A[], int n )
{
    int i,ans = 0;
    for( i = 1 ; i <= n ; i++ )
        if( A[ i ] == 1 )
            ans++;
    return ans;
}

int main()
{
    fin>>n>>k;

    for( i = 1 ; i <= n ; i++ )
        G[ i ] = U[ i ] = 1;

    for( i = 1 ; i <= k ; i++ )
    {
        fin>>m;
        for( j = 1 ; j <= m ; j++ )
            fin>>A[ j ];

        for( j = 1 ; j <= m ; j++ )
            fin>>B[ j ];

        fin>>l;

        if( l == 0 )
        {
            exclude( G , A , m );
            exclude( G , B , m );

            exclude( U , A , m );
            exclude( U , B , m );
        }
        else if( l == 1 )
        {
            intersect( G , A , n , m );
            intersect( U , B , n , m );
        }
        else
        {
            intersect( G , B , n , m );
            intersect( U , A , n , m );
        }
    }

    if( siz( G , n ) == 0 && siz( U , n ) == 1 )
    {
        for( i = 1 ; i <= n ; i++ )
            if( U[ i ] == 1 )
                fout<<i;
    }
    else if( siz( G , n ) == 1 && siz( U , n ) == 0 )
    {
        for( i = 1 ; i <= n ; i++ )
            if( G[ i ] == 1 )
                fout<<i;
    }
    else
        fout<<0;


return 0;
}