Pagini recente » Cod sursa (job #501351) | Cod sursa (job #2635315) | Cod sursa (job #2917519) | Cod sursa (job #2436603) | Cod sursa (job #3257313)
#include <bits/stdc++.h>
#define MAX 100000
using namespace std;
ifstream fin("2sat.in");
ofstream fout("2sat.out");
int i, nr, n, m, x, y, viz[2*MAX+5], r[2*MAX+5], x1, x2, yy1, y2;
vector<int>v[2*MAX+5], t[2*MAX+5], s;
void dfs(int i, int nr) {
viz[i]=nr;
for (int j:v[i]) {
if (viz[j]==0) dfs(j, nr);
}
s.push_back(i);
}
void dfs2(int i, int nr) {
viz[i]=nr;
for (int j:t[i]) {
if (viz[j]==0) dfs(j, nr);
}
}
int main()
{
fin>>n>>m;
for (i=1; i<=m; i++) {
fin>>x>>y;
if (x < 0) x1 = -x, x2 = n - x;
else x1 = n + x, x2 = x;
if (y < 0) yy1 = -y, y2 = n - y;
else yy1 = n + y, y2 = y;
v[x2].push_back(yy1);
v[y2].push_back(x1);
t[yy1].push_back(x2);
t[x1].push_back(y2);
}
for (i=1; i<=2*n; i++) {
if (viz[i]==0) dfs(i, 1);
}
for (i=1; i<=2*n; i++) viz[i]=0;
nr=0;
while (!s.empty()) {
i=s.back();
s.pop_back();
if (viz[i]==0) {
dfs2(i, ++nr);
}
}
for (i=1; i<=n; i++) {
if (viz[i]==viz[n+i]) {
fout<<-1;
return 0;
}
}
for (i=1; i<=n; i++) {
if (viz[i] > viz[n+i]) fout << 0 << ' ';
else fout<< 1 <<' ';
}
return 0;
}