Pagini recente » Cod sursa (job #879768) | Cod sursa (job #1427804) | Cod sursa (job #772836) | Cod sursa (job #141349) | Cod sursa (job #3041370)
#include <bits/stdc++.h>
using ll=long long;
#define S second
#define F first
#define endl '\n'
#define spid ios_base::sync_with_stdio(false);cin.tie(NULL);
const int mod=1e9+7;
const double pi=3.14159265359;
const int maxn=200005;
using namespace std;
int n,m,chk[maxn],ad[maxn];
vector<int> L;
vector<vector<int>> A(maxn,vector<int>()),inv(maxn,vector<int>());
void dfs1(int i){
chk[i]=0;
for(int j=0;j<A[i].size();j++){
if(chk[A[i][j]])dfs1(A[i][j]);
}
L.push_back(i);
}
void dfs2(int i,int comp){
chk[i]=comp;
for(int j=0;j<inv[i].size();j++){
if(chk[inv[i][j]]==0)dfs2(inv[i][j],comp);
}
}
int main(){
ifstream cin("2sat.in");
ofstream cout("2sat.out");
cin>>n>>m;
for(int i=0;i<=2*n+1;i++)chk[i]=1;
for(int i=0;i<m;i++){
int a,b;
cin>>a>>b;
if(a<0&&b<0){
A[2*(-a)].push_back(2*(-b)+1);
inv[2*(-b)+1].push_back(2*(-a));
A[2*(-b)].push_back(2*(-a)+1);
inv[2*(-a)+1].push_back(2*(-b));
}
else if(a<0&&b>0){
A[2*(-a)].push_back(2*b);
inv[2*b].push_back(2*(-a));
A[2*b+1].push_back(2*(-a)+1);
inv[2*(-a)+1].push_back(2*b+1);
}
else if(b<0&&a>0){
A[2*(-b)].push_back(2*a);
inv[2*a].push_back(2*(-b));
A[2*a+1].push_back(2*(-b)+1);
inv[2*(-b)+1].push_back(2*a+1);
}
else{
A[2*a+1].push_back(2*b);
inv[2*b].push_back(2*a+1);
A[2*b+1].push_back(2*a);
inv[2*a].push_back(2*b+1);
}
}
for(int i=2;i<=2*n+1;i++){
if(chk[i])dfs1(i);
}
int comp=1;
for(int i=L.size()-1;i>=0;i--){
if(chk[L[i]]==0){
dfs2(L[i],comp);
comp++;
}
}
int sw=1;
for(int i=1;i<=n;i++){
if(chk[2*i]==chk[2*i+1])sw=0;
else if(chk[2*i]>chk[2*i+1])ad[i]=1;
else ad[i]=0;
}
if(sw){
for(int i=1;i<=n;i++)cout<<ad[i]<<" ";
}
else cout<<-1<<endl;
}