Cod sursa(job #3200597)

Utilizator AndreidreiGresoiu Liviu-Andrei Andreidrei Data 5 februarie 2024 11:00:36
Problema 2SAT Scor 100
Compilator cpp-64 Status done
Runda Arhiva educationala Marime 1.23 kb
#include <bits/stdc++.h>
#include <cstring>
#include <cstdio>
#pragma GCC optimize ("O3")
#define din cin
#define dout out
#define pi 3.14159265359
#define sw(x,y) x^=y,y^=x,x^=y
#define bmin(a,b)((a<b)?(a):(b))
#define bmax(a,b)((a>b)?(a):(b))
#define bminify(a,b)a=bmin(a,b)
#define bmaxify(a,b)a=bmax(a,b)
#define forq(i,ii,n)for(i=ii;i<n;i++)
#define f first
#define s second
#define mod 1000000007ll
#define nmax 200002
#define lim 351
using namespace std;
typedef long long ll;
ifstream in("2sat.in");
ofstream out("2sat.out");
//FILE *fin=fopen("infasuratoare.in","r");
//FILE *fout=fopen("infasuratoare.out","w");
int n,m,i,j,k,l,p[nmax],q[nmax],c[nmax],z,ccon[nmax],o;
vector<int>g[nmax];bitset<nmax>e;
void tr(int v){
p[v]=q[v]=++z,e[v]=1,c[l++]=v;
for(auto i:g[v])
    if(!p[i])
        tr(i),bminify(q[v],q[i]);
        else if(e[i])bminify(q[v],p[i]);
if(p[v]==q[v]){
    o++;
    while(c[--l]!=v)e[c[l]]=0,ccon[c[l]]=o;
    e[v]=0,ccon[v]=o;
}
}
int main()
{
in>>n>>m;
while(m--)
    in>>i>>j,g[n-i].emplace_back(n+j),g[n-j].emplace_back(n+i);
for(i=0;i<=2*n;i++)if(p[i]==0)tr(i);
for(i=1;i<=n;i++)if(ccon[n+i]==ccon[n-i]){out<<-1;return 0;}
for(i=1;i<=n;i++)out<<(ccon[n+i]<ccon[n-i])<<' ';
}