Pagini recente » Cod sursa (job #840289) | Cod sursa (job #1647108) | Cod sursa (job #716715) | Cod sursa (job #2454333) | Cod sursa (job #1122124)
#include <iostream>
#include <fstream>
#include <cstdlib>
#include <ctime>
using namespace std;
const int Nmax = 100002;
const int Vmax = 5000;
int sol[Nmax];
pair<int,int> v[2 * Nmax];
int N, M;
inline int abs( int i )
{
if ( i < 0 )
return -i;
else
return i;
}
inline bool value(int i)
{
int x = sol[ abs( v[i].first ) ], y = sol[ abs( v[i].second ) ];
if ( v[i].first < 0 ) x ^= 1;
if ( v[i].second < 0 ) y ^= 1;
return x | y;
}
int main()
{
freopen("2sat.in", "r", stdin);
freopen("2sat.out", "w", stdout);
scanf("%d %d", &N, &M);
for ( int i = 1; i <= M; ++i )
{
scanf("%d %d", &v[i].first, &v[i].second);
}
srand( time( NULL ) );
for ( int i = 1; i <= N; ++i )
sol[i] = rand() % 2;
for ( int i = 1; i <= Vmax; ++i )
{
for ( int j = 1; j <= M; ++j )
{
if ( value( j ) == 0 )
{
if ( rand() & 1 )
sol[ abs( v[j].first ) ] ^= 1;
else
sol[ abs( v[j].second ) ] ^= 1;
break;
}
if ( j == M )
{
for ( int i = 1; i <= N; ++i )
{
printf("%d ", sol[i]);
}
return 0;
}
}
}
printf("-1");
return 0;
}