Pagini recente » Cod sursa (job #2193908) | Cod sursa (job #1083017) | Cod sursa (job #288181) | Cod sursa (job #576664) | Cod sursa (job #2723449)
#include <fstream>
#include <cmath>
#define DMAX 200005
using namespace std;
ifstream fin("2sat.in");
ofstream fout("2sat.out");
bool Sat(int val[], int n, int m[][3])
{
int i,x,y,z,adevar;
for(i=0;i<n;i++)
{
x=abs(m[i][0]);
x=val[x];
if(m[i][0]<0)
x=1-x;
y=abs(m[i][1]);
y=val[y];
if(m[i][1]<0)
y=1-y;
adevar=(x||y);
if(adevar==0)
return 0;
}
return 1;
}
void Generate(int p, int val[], int maxi, int n, int m[][3], int& flag, int sol[])
{
int j,i;
if(p==maxi+1)
{
if(Sat(val,n,m)==1)
{
flag=1;
for(j=1;j<=maxi;j++)
sol[j]=val[j];
}
return;
}
if(flag==1)
return;
for(i=0;i<=1;i++)
{
val[p]=i;
Generate(p+1,val,maxi,n,m,flag,sol);
}
}
int val[DMAX],m[DMAX][3],sol[DMAX];
int main()
{
int maxi=0,i,j,x,n,flag;
fin>>n;
maxi=n;
fin>>n;
for(i=0;i<n;i++)
for(j=0;j<2;j++)
fin>>m[i][j];
flag=0;
for(i=0;i<=1;i++)
{
val[1]=i;
Generate(2,val,maxi,n,m,flag,sol);
}
if(flag==0)
fout<<-1;
else
{
for(i=1;i<=maxi;i++)
fout<<sol[i]<<' ';
}
return 0;
}