Pagini recente » Cod sursa (job #1364914) | Cod sursa (job #1093345) | Cod sursa (job #228543) | Cod sursa (job #1233419) | Cod sursa (job #2016660)
#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);
}