Cod sursa(job #1542499)

Utilizator bogdanRUSURusu Bogdan bogdanRUSU Data 5 decembrie 2015 13:59:41
Problema 2SAT Scor 10
Compilator cpp Status done
Runda Arhiva educationala Marime 1.51 kb
#include <fstream>
#include <vector>
#include <cmath>
using namespace std;

ifstream fin ( "2sat.in" );
ofstream fout ( "2sat.out" );
vector < int > CL1, CL2;
vector < bool > ans;
unsigned n, m;

bool vfSAT()
{
    bool rez;
    for (unsigned i = 0; i < m; ++i)
    {
        bool rezP;
        if ( CL1[i] > n )
            rezP = !ans[ CL1[i] - n ];
        else
            rezP = ans[ CL1[i] ];
        if ( CL2[i] > n )
            rezP += !ans[ CL2[i] - n ];
        else
            rezP += ans[ CL2[i] ];
        rez *= rezP;
    }
    return rez;
}

int power ( int a, int b )
{
    if ( b == 0 )
        return 1;
    return a * power (a, --b);
}

int genPerm ( int k )
{
    if (k == n)
    {

        if (vfSAT() == 1)
        {
            for (unsigned i = 1; i <= n; ++i)
                fout << ans[i] << " ";
            fout << '\n';
            return 1;
        }
        else
            return 0;
    }
    for (unsigned i = 0; i <= 1; ++i)
        {
            ans[k] = i;
            genPerm(k+1);
        }
    return -1;
}
int main()
{
    fin >> n >> m;
    ans.resize(n+1);
    CL1.resize(m+1);
    CL2.resize(m+1);
    for (unsigned i = 0; i < m; ++i)
    {
        fin >> CL1[i];
        if (CL1[i] < 0)
        {
            CL1[i] = n + abs(CL1[i]);
        }
        fin >> CL2[i];
        if (CL2[i] < 0)
        {
            CL2[i] = n + abs(CL2[i]);
        }
    }
    if (genPerm(1) == -1);
        fout << -1;
    return 0;
}