Pagini recente » Cod sursa (job #2522586) | Cod sursa (job #3272527) | Cod sursa (job #3264424) | Cod sursa (job #3267512) | Cod sursa (job #383037)
Cod sursa(job #383037)
#include <cstdio>
#include <cstdlib>
#include <ctime>
#define file_in "2sat.in"
#define file_out "2sat.out"
int n,m,x[100000],y[100000],v[100000],rez,poz;
inline int abs(int a) { return a>=0?a:-a; }
int verif(int i)
{
int a,b;
a=v[abs(x[i])];
b=v[abs(y[i])];
if (x[i]<0)
a^=1;
if (y[i]<0)
b^=1;
return a|b;
}
int ok()
{
for (int i=1;i<=m;++i)
if (!verif(i))
return 0;
return 1;
}
int main()
{
int i,j;
freopen(file_in,"r",stdin);
freopen(file_out,"w",stdout);
scanf("%d %d", &n, &m);
for (i=1;i<=m;++i)
scanf("%d %d", &x[i], &y[i]);
srand(time(0));
for (i=1;i<=n;++i)
v[i]=rand()%2;
for (i=0;i<=n*25;++i)
{
rez=1;
for (j=1;j<=m;++j)
{
rez&=verif(j);
if (!rez)
{
poz=j;
break;
}
}
if (rez==1)
{
for (j=1;j<=n;++j)
printf("%d ", v[j]);
return 0;
}
if (rand()%2==0)
v[abs(x[poz])]^=1;
else
v[abs(y[poz])]^=1;
}
printf("-1\n");
fclose(stdin);
fclose(stdout);
return 0;
}