Cod sursa(job #911682)

Utilizator apopeid13Apopeid Alejandro apopeid13 Data 11 martie 2013 20:23:34
Problema Party Scor 100
Compilator cpp Status done
Runda Arhiva de probleme Marime 1.23 kb
#include <fstream>
#include <algorithm>
#include <stdio.h>
#include <stdlib.h>
#include <math.h>
#include <iostream>
#include <string.h>
#include <vector>
using namespace std;
#define MAX_N 2000
 
int v[MAX_N], x[MAX_N], y[MAX_N], c[MAX_N];
 
int valid(int i)
{
    switch(c[i])
    {
        case 0: return v[x[i]] || v[y[i]]; break;
        case 1: return v[x[i]] || !v[y[i]]; break;
        case 2: return v[y[i]] || !v[x[i]]; break;
        case 3: return v[x[i]]+v[y[i]] != 2;
    }
    return 1;
}
 
void random(int i)
{
    int r = rand()%2; r++;
    if(r == 1)
        v[x[i]] = !v[x[i]];
    if(r == 2)
        v[y[i]] = !v[y[i]];
}
 
int main()
{
    ifstream in("party.in");
    ofstream out("party.out");
 
    int i, n, m, nr=0;
    in>>n>>m;
    for(i=1; i<=m; i++)
        in>>x[i]>>y[i]>>c[i];
    for(i=1; i<=n; i++)
        v[i] = 1;
    while(1)
    {
        for(i=1; i<=m; i++)
            if(valid(i) == 0)
            {
                random(i);
                break;
            }
        if(i == m+1)
            break;
    }
    for(i=1; i<=n; i++)
        if(v[i])
            nr++;
    out<<nr<<'\n';
    for(i=1; i<=n; i++)
        if(v[i])
            out<<i<<'\n';
}