Cod sursa(job #2215604)

Utilizator NOSCOPEPROKENDYMACHEAMACUMVREAU NOSCOPEPROKENDY Data 22 iunie 2018 19:39:47
Problema Party Scor 100
Compilator cpp Status done
Runda Arhiva de probleme Marime 1.59 kb
#include <fstream>
#include <cstdlib>
using namespace std;
ifstream fi("party.in");
ofstream fo("party.out");
int n,m;
int P[1001][2];
int X[101];

int modul(int x)
{
    if (x>=0)
        return x;
    return -x;
}

int main()
{
    fi>>n>>m;
    for (int i=1;i<=m;i++)
    {
        int a,b,c;
        fi>>a>>b>>c;
        if (c==0)
        {
            P[i][0]=a;
            P[i][1]=b;
        }
        if (c==1)
        {
            P[i][0]=a;
            P[i][1]=-b;
        }
        if (c==2)
        {
            P[i][0]=-a;
            P[i][1]=b;
        }
        if (c==3)
        {
            P[i][0]=-a;
            P[i][1]=-b;
        }
    }
    /// se dau valori 1 tuturor variabilelor
    for (int i=1;i<=n;i++)
        X[i]=1;
    while (1)
    {
        int poz=0;
        for (int i=1;i<=m;i++)
        {
            int a,b;
            if (P[i][0]>0)
                a=X[P[i][0]];
            else
                a=1-X[-P[i][0]];
            if (P[i][1]>0)
                b=X[P[i][1]];
            else
                b=1-X[-P[i][1]];
            if (a==0 && b==0)
            {
                poz=i;
                break;
            }
        }
        if (poz==0)
            break;
        int v;
        v=rand()%2;
        X[modul(P[poz][v])]=1-X[modul(P[poz][v])];
    }
    int rez;
    rez=0;
    for (int i=1;i<=n;i++)
        if (X[i]==1)
            rez++;
    fo<<rez<<"\n";
    for (int i=1;i<=n;i++)
        if (X[i]==1)
            fo<<i<<"\n";
    fi.close();
    fo.close();
    return 0;
}