Pagini recente » Cod sursa (job #617630) | Cod sursa (job #2327968) | Cod sursa (job #715035) | Cod sursa (job #93925) | Cod sursa (job #387329)
Cod sursa(job #387329)
using namespace std;
#include <vector>
#define FORit(it,x) for (__typeof((x).begin()) it = (x).begin(); it != (x).end(); ++it)
#define non(x) (x>N?x-N:x+N)
#define pb push_back
int x,y,i,N,M,Q[1<<18];
vector<int> A[1<<18],B[1<<18];
bool V[1<<18],S[1<<18],ok(1);
void DFP(int x)
{
V[x] = 1;
FORit(it,A[x])
if(!V[*it])
DFP(*it);
Q[++Q[0]] = x;
}
void DFM(int x)
{
ok = !S[x];
V[x] = S[non(x)] = 1;
FORit(it,B[x])
if(!V[*it])
DFM(*it);
}
int main()
{
freopen("2sat.in","r",stdin);
freopen("2sat.out","w",stdout);
scanf("%d%d",&N,&M);
for(;M--;)
{
scanf("%d%d",&x,&y);
x=x<0?-x+N:x;
y=y<0?-y+N:y;
A[non(x)].pb(y);
A[non(y)].pb(x);
B[y].pb(non(x));
B[x].pb(non(y));
}
for(i=1;i<=N*2;++i)
if(!V[i])
DFP(i);
memset(V,0,sizeof(V));
for(i = N*2;i>=1;--i)
if(!V[Q[i]] && !V[non(Q[i])])
DFM(Q[i]);
if(ok) for(;i = N--;) printf("%d ",S[i]);
else printf("-1\n");
return 0;
}