Pagini recente » Cod sursa (job #2221629) | Cod sursa (job #651005) | Cod sursa (job #214232) | Cod sursa (job #2357233) | Cod sursa (job #1225326)
#include <iostream>
#include <fstream>
#include <vector>
using namespace std;
ifstream fin("2sat.in");
ofstream fout("2sat.out");
#define MAX 200010
vector<int> G[MAX*2];
typedef vector <int> :: iterator iter;
bool viz[MAX*2], rez[MAX*2];
#define viz (viz + MAX)
#define rez (rez + MAX)
#define G (G + MAX)
int e1[2*MAX], e2[2*MAX];
int st[2*MAX];
int n;
void df(int nod)
{
viz[nod]=1;
for(iter it=G[nod].begin();it!=G[nod].end();it++)
{
if(!viz[*it])
df(*it);
}
st[++st[0]]=nod;
}
int main()
{
int m, i, x, y;
fin>>n;
fin>>m;
for(i=1;i<=m;i++)
{
fin>>x>>y;
G[-x].push_back(y);
G[-y].push_back(x);
e1[i]=x;
e2[i]=y;
}
for(i=1;i<=n;i++)
if(!viz[i])
df(i);
for(i=1;i<=n;i++)
if(!viz[-i])
df(-i);
for(i=2*n;i>=1;i--)
{
if(!rez[st[i]] && !rez[-st[i]])
{
rez[-st[i]]=1;
}
}
bool imp=0;
for(i=1;i<=m;i++)
{
if(!rez[e1[i]] && !rez[e2[i]])
imp=1;
}
if(imp)
{
fout<<"-1\n";
}
else
{
for(i=1;i<=n;i++)
{
fout<<rez[i]<<" ";
}
}
}