Pagini recente » Cod sursa (job #1674776) | Cod sursa (job #2195836) | Cod sursa (job #574164) | Cod sursa (job #3245952) | Cod sursa (job #1919353)
#include <bits/stdc++.h>
#define Nmax 200005
#define pb push_back
using namespace std;
vector <int> L[Nmax],T[Nmax];
int n,ans[Nmax],seen[Nmax],order[Nmax],l,Bad;
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]) dfs(it);
order[++l]=nod;
}
inline void dfs1(int nod)
{
if(Bad) return;
seen[nod]=0;
if(ans[nod]==1)
{
Bad=1; return;
}
ans[nod]=0; ans[non(nod)]=1;
for(auto it : T[nod])
if(seen[it]) 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=non(-x);
if(y<0) y=non(-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);
for(i=1;i<=2*n;++i) ans[i]=-1;
for(i=2*n;i;--i)
if(seen[order[i]] && seen[non(order[i])]) dfs1(order[i]);
if(Bad) cout<<"-1\n";
else
{
for(i=1;i<=n;++i) cout<<ans[i]<<" ";
cout<<"\n";
}
return 0;
}