Cod sursa(job #2654011)

Utilizator irimia_alexIrimia Alex irimia_alex Data 29 septembrie 2020 17:44:22
Problema 2SAT Scor 20
Compilator cpp-64 Status done
Runda Arhiva educationala Marime 1.05 kb
#include <iostream>
#include <fstream>
#define NMAX 100005
#define MMAX 200005

using namespace std;

int p[MMAX][2];
int v[NMAX];
int n, m;

bool check() {
    for (int i = 0;i < m;++i) {
        int x, y;
        if (p[i][0] < 0) x = 1 - v[-p[i][0]];
        else x = v[p[i][0]];

        if (p[i][1] < 0) y = 1 - v[-p[i][1]];
        else y = v[p[i][1]];

        if (x == 0 && y == 0)
            return false;
    }
    return true;
}

bool bt(int k) {
    if (check() == false) return false;
    if (k == n + 1) return true;
    for (int i = 0;i <= 1;++i) {
        v[k] = i;
        if (bt(k + 1) == true) return true;
    }
    v[k] = -1;
    return false;
}

int main() {

    ifstream fin("2sat.in");
    ofstream fout("2sat.out");

    fin >> n >> m;
    for (int i = 0;i < m;++i) {
        fin >> p[i][0] >> p[i][1];
    }

    for (int i = 1;i <= n;++i)
        v[i] = -1;

    if (bt(1) == true)
        for (int i = 1;i <= n;++i)
            fout << v[i] << ' ';
    else fout << -1;

    return 0;
}