Pagini recente » Cod sursa (job #2506592) | Cod sursa (job #3247461) | Cod sursa (job #2880246) | Cod sursa (job #197261) | Cod sursa (job #2730131)
#include <iostream>
#include <fstream>
#include <cstring>
#include <vector>
using namespace std;
ifstream in("2sat.in");
ofstream out("2sat.out");
const int dim = 100005;
int n,m, cnt,dap;
int val[2 * dim + 5];
int completat[2 * dim + 5];
vector<int> vec[2 * dim + 5];
vector<int> vec2[2 * dim + 5];
vector<int> componente[2 * dim + 5];
int viz[2 * dim + 5],q[2 * dim + 5], st;
void DFS1(int nod)
{
viz[nod] = 1;
for (auto y:vec[nod])
{
if (!viz[y])
{
DFS1(y);
}
}
q[++st] = nod;
}
void DFS2(int nod)
{
componente[cnt].push_back(nod);
viz[nod] = 1;
if (!completat[nod])
{
completat[nod] = 1;
val[nod] = 0;
completat[- nod + dim + dim] = 1;
val[- nod + dim + dim] = 1;
}
else
{
if (val[nod])
{
dap = 1;
}
}
for (auto y:vec2[nod])
{
if (!viz[y])
{
DFS2(y);
}
}
}
int main()
{
in >> n >> m;
int x,y;
while (m--)
{
in >> x >> y;
vec[-x + dim].push_back(y + dim);
vec[-y + dim].push_back(x + dim);
vec2[y + dim].push_back(-x + dim);
vec2[x + dim].push_back(-y + dim);
}
for (int i=-n; i<=n; i++)
{
if (!viz[i + dim])
{
DFS1(i + dim);
}
}
memset(viz,0,sizeof(viz));
for (int i=st; i>=1; i--)
{
if (completat[q[i]])
{
continue;
}
if (!viz[q[i]])
{
cnt++;
DFS2(q[i]);
}
}
if (dap == 1) out << "-1\n";
else
{
for (int i=1; i<=n; i++)
{
out << val[i + dim] << " ";
}
}
return 0;
}