Cod sursa(job #1708267)

Utilizator Athena99Anghel Anca Athena99 Data 26 mai 2016 20:18:26
Problema Party Scor 30
Compilator cpp Status done
Runda Arhiva de probleme Marime 1.37 kb
#include <cstdlib>
#include <fstream>

using namespace std;

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

const int nmax= 100;
const int mmax= 1000;

int n, m, sol;

bool u[nmax+1];
int x[mmax+1], y[mmax+1];

int main(  ) {
    fin>>n>>m;
    for ( int i= 1, k; i<=m; ++i ) {
        fin>>x[i]>>y[i]>>k;
        if ( k==1 || k==3 ) {
            x[i]= -x[i];
        }
        if ( k==2 || k==3 ) {
            y[i]= -y[i];
        }
    }

    for ( int i= 1; i<=n; ++i ) {
        u[i]= rand()%2;
    }

    for ( int ok= 0; ok==0; ) {
        ok= 1;
        for ( int i= 1; i<=m; ++i ) {
            if ( (x[i]>0 && u[x[i]]==1) || (x[i]<0 && u[-x[i]]==0) || (y[i]>0 && u[y[i]]==1) || ( y[i]<0 && u[-y[i]]==0) ) {
                continue;
            }

            int a= x[i], b= y[i], r= rand()%2;
            if ( a<0 ) {
                a= -a;
            }
            if ( b<0 ) {
                b= -b;
            }

            if ( r==0 ) {
                u[a]= 1-u[a];
            } else {
                u[b]= 1-u[b];
            }
            ok= 0;
        }
    }

    for ( int i= 1; i<=n; ++i ) {
        if ( u[i]==1 ) {
            ++sol;
        }
    }

    fout<<sol<<"\n";
    for ( int i= 1; i<=n; ++i ) {
        if ( u[i]==1 ) {
            fout<<i<<"\n";
        }
    }

    return 0;
}