Pagini recente » Cod sursa (job #3268050) | Cod sursa (job #3040723) | Cod sursa (job #2871958) | Cod sursa (job #3250291) | Cod sursa (job #2654004)
#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;
}
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;
}