Cod sursa(job #83061)

Utilizator DastasIonescu Vlad Dastas Data 9 septembrie 2007 22:18:51
Problema Party Scor 10
Compilator cpp Status done
Runda Arhiva de probleme Marime 1.43 kb
#include <cstdio>
#include <cstdlib>
#include <ctime>

const int maxn = 101;

FILE *in = fopen("party.in","r"), *out = fopen("party.out","w");

int n, m;
char rel[maxn][maxn];
char v[maxn]; // v[i] = 1 daca pers. i vine la petrecere si 0 daca nu

void read()
{
    fscanf(in, "%d %d", &n, &m);

    int x, y, c;
    for ( int i = 1; i <= m; ++i )
    {
        fscanf(in, "%d %d %d", &x, &y, &c);
        rel[x][y] = c;
        rel[y][x] = c;
    }
}

int main()
{
    read();
    srand(time(0));

    int ok = 0;

    while ( !ok )
    {
        ok = 1;

        int q = rand() % (n + 1);

        if ( v[q] == 1 )
            v[q] = 0;
        else
            v[q] = 1;

        for ( int i = 1; i <= n; ++i )
            for ( int j = i+1; j <= n; ++j )
            {
                if ( rel[i][j] == 0 && v[i] == 0 && v[j] == 0 )
                    ok = 0;

                if ( rel[i][j] == 1 && v[i] == 0 && v[j] == 1 )
                    ok = 0;

                if ( rel[i][j] == 2 && v[i] == 1 && v[j] == 0 )
                    ok = 0;

                if ( rel[i][j] == 3 && v[i] == 1 && v[j] == 1 )
                    ok = 0;
            }
    }

    int cnt = 0;
    for ( int i = 1; i <= n; ++i )
        if ( v[i] )
            ++cnt;

    fprintf(out, "%d\n", cnt);
    for ( int i = 1; i <= n; ++i )
        if ( v[i] )
            fprintf(out, "%d\n", i);

	return 0;
}