Pagini recente » Cod sursa (job #1017350) | Cod sursa (job #340356) | Cod sursa (job #1113042) | Cod sursa (job #861151) | Cod sursa (job #1542499)
#include <fstream>
#include <vector>
#include <cmath>
using namespace std;
ifstream fin ( "2sat.in" );
ofstream fout ( "2sat.out" );
vector < int > CL1, CL2;
vector < bool > ans;
unsigned n, m;
bool vfSAT()
{
bool rez;
for (unsigned i = 0; i < m; ++i)
{
bool rezP;
if ( CL1[i] > n )
rezP = !ans[ CL1[i] - n ];
else
rezP = ans[ CL1[i] ];
if ( CL2[i] > n )
rezP += !ans[ CL2[i] - n ];
else
rezP += ans[ CL2[i] ];
rez *= rezP;
}
return rez;
}
int power ( int a, int b )
{
if ( b == 0 )
return 1;
return a * power (a, --b);
}
int genPerm ( int k )
{
if (k == n)
{
if (vfSAT() == 1)
{
for (unsigned i = 1; i <= n; ++i)
fout << ans[i] << " ";
fout << '\n';
return 1;
}
else
return 0;
}
for (unsigned i = 0; i <= 1; ++i)
{
ans[k] = i;
genPerm(k+1);
}
return -1;
}
int main()
{
fin >> n >> m;
ans.resize(n+1);
CL1.resize(m+1);
CL2.resize(m+1);
for (unsigned i = 0; i < m; ++i)
{
fin >> CL1[i];
if (CL1[i] < 0)
{
CL1[i] = n + abs(CL1[i]);
}
fin >> CL2[i];
if (CL2[i] < 0)
{
CL2[i] = n + abs(CL2[i]);
}
}
if (genPerm(1) == -1);
fout << -1;
return 0;
}