Pagini recente » Cod sursa (job #424701) | Cod sursa (job #724686) | Cod sursa (job #582227) | Cod sursa (job #1625611) | Cod sursa (job #2290005)
#include <bits/stdc++.h>
#define N 100010
#define N2 (N*2)
using namespace std;
int n, m;
vector<int> g[N2];
int st[N2];
int lst;
int comp[N2];
int val[N2];
int niv[N2];
int low[N2];
int inst[N2];
int ind;
int nrcomp = 0;
int id(int n)
{
return n < 0 ? (-n * 2 - 1) : (n * 2 - 2);
}
void dfs(int nod)
{
if(niv[nod] != -1) return;
st[lst++] = nod;
niv[nod] = ++ind;
low[nod] = niv[nod];
inst[nod] = 1;
for(auto next : g[nod])
{
dfs(next);
if(inst[next])
low[nod] = min(low[nod], low[next]);
}
if(niv[nod] == low[nod])
{
while(st[lst - 1] != nod)
{
comp[st[lst - 1]] = nrcomp;
inst[st[lst - 1]] = 0;
lst--;
}
comp[st[lst - 1]] = nrcomp;
inst[st[lst - 1]] = 0;
lst--;
nrcomp++;
}
}
pair<int, int> v[100010];
int main()
{
freopen("2sat.in", "r", stdin);
freopen("2sat.out", "w", stdout);
scanf("%d%d", &n, &m);
for(int i = 0; i < m; i++)
{
int a, b;
scanf("%d%d", &a, &b);
g[id(-a)].push_back(id(b));
g[id(-b)].push_back(id(a));
v[i] = make_pair(a, b);
}
for(int i = 0; i < 2 * n; i++)
niv[i] = -1;
for(int i = 0; i < 2 * n; i++)
{
dfs(i);
}
for(int i = 1; i <= n; i++)
{
if(comp[id(i)] == comp[id(-i)])
{
printf("-1");
return 0;
}
}
for(int i = 1; i <= n; i++)
val[i] = comp[id(i)] < comp[id(-i)] ? 1 : 0;
for(int i = 1; i <= n; i++)
printf("%d ", val[i]);
return 0;
}