Pagini recente » Cod sursa (job #1110553) | Cod sursa (job #2118142) | Cod sursa (job #2532408) | Cod sursa (job #990005) | Cod sursa (job #1643453)
#include <bits/stdc++.h>
#define Nmax 200005
#define pb push_back
using namespace std;
vector <int> L[Nmax],T[Nmax];
int n,v[Nmax],l,val[Nmax],Bad;
bool seen[Nmax],used[Nmax];
inline int non(int x)
{
if(x<=n) return x+n;
return x-n;
}
inline void Dfs(int nod)
{
seen[nod]=1;
for(auto it : L[nod])
{
if(seen[it]) continue;
Dfs(it);
}
v[++l]=nod;
}
inline void Dfs1(int nod)
{
if(Bad) return;
if(val[nod]==1)
{
Bad=1; return;
}
val[nod]=0; val[non(nod)]=1;
used[nod]=1;
for(auto it : T[nod])
{
if(used[it]) continue;
Dfs1(it);
}
}
int main()
{
int m,x,y,i;
ifstream cin("2sat.in");
ofstream cout("2sat.out");
cin>>n>>m;
while(m--)
{
cin>>x>>y;
if(x<0) x=n-x;
if(y<0) y=n-y;
L[non(x)].pb(y); T[y].pb(non(x));
L[non(y)].pb(x); T[x].pb(non(y));
}
for(i=1;i<=2*n;++i)
{
if(!seen[i]) Dfs(i);
val[i]=-1;
}
for(i=2*n;i;--i)
if(val[v[i]]==-1) Dfs1(v[i]);
if(Bad) cout<<"-1\n";
else
{
for(i=1;i<=n;++i) cout<<val[i]<<" ";
cout<<"\n";
}
return 0;
}