Cod sursa(job #2016660)

Utilizator MaligMamaliga cu smantana Malig Data 29 august 2017 22:52:32
Problema 2SAT Scor 20
Compilator cpp Status done
Runda Arhiva educationala Marime 1.38 kb
#include <iostream>
#include <fstream>
#include <queue>
#include <vector>

#define ll long long
#define ull unsigned long long
#define pb push_back
using namespace std;
ifstream in("2sat.in");
ofstream out("2sat.out");

const int NMax = 1e5 + 5;
const int MMax = 2e5 + 5;
const int inf = 1e18 + 5;

int N,M;
int val[NMax];
bool ans;
pair<int,int> e[MMax];

void backT(int);

int main() {
    in>>N>>M;
    for (int i=1;i <= M;++i) {
        in>>e[i].first>>e[i].second;
    }

    backT(1);

    if (!ans) {
        out<<"-1\n";
    }

    in.close();out.close();
    return 0;
}

void backT(int idx) {
    if (ans) {
        return;
    }

    if (idx == N+1) {
        int good = true;
        for (int i=1;i <= M;++i) {
            int i1 = abs(e[i].first), i2 = abs(e[i].second),
                x1 = val[i1],x2 = val[i2];
            if (e[i].first < 0) {
                x1 = 1 - x1;
            }
            if (e[i].second < 0) {
                x2 = 1 - x2;
            }

            if ( !(x1 | x2) ) {
                good = false;
                break;
            }
        }

        if (good) {
            for (int i=1;i <= N;++i) {
                out<<val[i]<<' ';
            }
            ans = true;
        }

        return;
    }

    val[idx] = 0;
    backT(idx+1);
    val[idx] = 1;
    backT(idx+1);
}