Pagini recente » Cod sursa (job #349302) | Cod sursa (job #1777683) | Cod sursa (job #1138968) | Cod sursa (job #2157519) | Cod sursa (job #2591424)
#include <bits/stdc++.h>
#define N 200002
using namespace std;
ifstream in("2sat.in");
ofstream out("2sat.out");
vector<int> v[N];
stack<int> s;
int a[N],n;
int co(int i)
{
return (i+n)%(2*n);
}
void dfs(int i)
{
if(a[i])
return;
a[i]=1;
for(auto it:v[i])
dfs(it);
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);
}
for(i=0;i<2*n;i++)
dfs(i);
for(;!s.empty();s.pop())
if(a[s.top()]&&a[co(s.top())])
a[s.top()]=0;
for(i=0;i<2*n;i++)
if(a[i])
for(auto it:v[i])
if(!a[it])
{
out<<-1;
return 0;
}
for(i=n;i<2*n;i++)
out<<a[i]<<" ";
return 0;
}