Cod sursa(job #518514)

Utilizator ciprianfFarcasanu Alexandru Ciprian ciprianf Data 1 ianuarie 2011 16:16:35
Problema 2SAT Scor 70
Compilator cpp Status done
Runda Arhiva educationala Marime 0.94 kb
#include <stdio.h>
#include <algorithm>
#include <stdlib.h>
#include <time.h>
using namespace std;
#define NMAX 200010
pair <int, int> E[NMAX];
int V[NMAX];
int n, m;
inline int valoare(int x){
	if(x < 0) return 1-V[-x];
	return V[x];
}
inline int not_valid(){
	for(int i = 1; i <= m; ++i)
		if(valoare(E[i].first) || valoare(E[i].second) );
		else return i;
	return 0;
}
int main(){
	clock_t start = clock();
	freopen("2sat.in", "r", stdin);
	freopen("2sat.out", "w", stdout);
	scanf("%d%d", &n, &m);
	srand(time(NULL));
	
	for(int i = 1; i <= m; ++i)
		scanf("%d%d", &E[i].first, &E[i].second);
	
	for(int i = 1; i <= n; ++i)
		V[i] = rand()%2;
	
	for(int p;p = not_valid();){
		if(rand()%2)
			V[abs(E[p].first)] ^= 1;
		else V[abs(E[p].second)] ^= 1;
		if( (double) (clock()-start)/CLOCKS_PER_SEC >= 1.67){
			printf("-1\n");
			return 0;
		}
	}
	for(int i = 1; i <= n;++i)
		printf("%d ", V[i]);
	return 0;
}