Pagini recente » Cod sursa (job #3152886) | Cod sursa (job #2333654) | Cod sursa (job #751999) | Cod sursa (job #1529900) | Cod sursa (job #1968452)
#include <bits/stdc++.h>
#define Nmax 200005
#define pb push_back
using namespace std;
vector <int> L[Nmax],T[Nmax];
bool seen[Nmax],viz[Nmax],Bad;
int ans[Nmax],order[Nmax],l,n;
inline int non(int x)
{
if(x<=n) return x+n;
return x-n;
}
inline void dfs(int nod)
{
viz[nod]=1;
for(auto it : L[nod])
if(!viz[it]) dfs(it);
order[++l]=nod;
}
inline void dfs1(int nod)
{
if(Bad) return;
seen[nod]=1;
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 x,y,m,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);
L[non(y)].pb(x);
T[y].pb(non(x));
T[x].pb(non(y));
}
for(i=1;i<=2*n;++i)
if(!viz[i]) dfs(i);
for(i=1;i<=2*n;++i) ans[i]=-1;
for(i=l;i && !Bad;--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;
}