Pagini recente » Cod sursa (job #2877252) | Cod sursa (job #812189) | Cod sursa (job #2034950) | Cod sursa (job #2144396) | Cod sursa (job #2921289)
#include <bits/stdc++.h>
using namespace std;
ifstream fin ("2sat.in");
ofstream fout("2sat.out");
const int dim=2e5+9;
vector<int>adj[dim];
vector<int>adj_t[dim];
bool vizitat[dim];
int ordine[dim],len;
int ans[dim],comp[dim];
void dfs1(int x){
vizitat[x]=true;
for(int y:adj[x]){
if(!vizitat[y]){
dfs1(y);
}
}
ordine[++len]=x;
}
void dfs2(int x,int nr){
comp[x]=nr;
for(int y:adj_t[x]){
if(!comp[y]){
dfs2(y,nr);
}
}
}
void add(int a,bool na,int b,bool nb){
a=2*a^na;
b=2*b^nb;
int neg_a=a^1;
int neg_b=b^1;
adj[neg_a].push_back(b);
adj[neg_b].push_back(a);
adj_t[b].push_back(neg_a);
adj_t[a].push_back(neg_b);
}
signed main(){
int n,m;
fin>>n>>m;
for(int i=1;i<=m;i++){
int x,y;
fin>>x>>y;
add(abs(x)-1,(x<0),abs(y)-1,(y<0));
}
for(int i=0;i<2*n;i++){
if(!vizitat[i]){
dfs1(i);
}
}
int nr_comp=1;
for(int i=len;i>=1;i--){
int x=ordine[i];
if(!comp[x]){
dfs2(x,nr_comp);
nr_comp++;
}
}
for(int i=0;i<2*n;i+=2){
if(comp[i]==comp[i+1]){
fout<<-1;
return 0;
}
ans[i/2]=comp[i]>comp[i+1];
}
for(int i=0;i<n;i++){
fout<<ans[i]<<' ';
}
}