Pagini recente » Cod sursa (job #2414525) | Cod sursa (job #2819976) | Cod sursa (job #3241076) | Cod sursa (job #1352318) | Cod sursa (job #2591469)
#include <bits/stdc++.h>
#define N 200002
using namespace std;
ifstream in("2sat.in");
ofstream out("2sat.out");
vector<int> v[N],vv[N],o;
stack<int> s;
int a[N],n;
int co(int i)
{
return (i+n)%(2*n);
}
void dfs(int i,int c)
{
if(a[i]==c)
return;
a[i]=c;
if(!c)
o.push_back(i);
for(auto it:(c?v[i]:vv[i]))
dfs(it,c);
if(c)
s.push(i);
}
int main()
{
int m,i,j;
in>>n>>m;
while(m--)
{
in>>i>>j;
i=(i>0)*n+abs(i)-1;
j=(j>0)*n+abs(j)-1;
v[co(i)].push_back(j);
v[co(j)].push_back(i);
vv[i].push_back(co(j));
vv[j].push_back(co(i));
}
for(i=0;i<2*n;i++)
dfs(i,1);
for(;!s.empty();s.pop())
dfs(s.top(),0);
for(auto it:o)
if(!a[it])
a[it]=1,a[co(it)]=2;
for(i=0;i<2*n;i++)
if(a[i]==2)
for(auto it:v[i])
if(a[it]==1)
{
out<<-1;
return 0;
}
for(i=n;i<2*n;i++)
out<<a[i]-1<<" ";
return 0;
}