Cod sursa(job #2724772)

Utilizator mariamirabella2Bucur-Sabau Maria-Mirabela mariamirabella2 Data 17 martie 2021 19:52:08
Problema 2SAT Scor 70
Compilator cpp-64 Status done
Runda Arhiva educationala Marime 1.33 kb
#include <fstream>
#include <vector>
#include <stack>
#include <map>
#include <algorithm>

using namespace std;
ifstream cin("2sat.in");
ofstream cout("2sat.out");
stack <int> s;
int n,m,nr;
map <pair<int,int>,int>mapp;
vector <int> aux[200005],aux2[200005];
vector <int> *v, *v2;
bool aux_viz[200005],aux_viz2[200005],aux_val[200005],aux_completat[200005];
bool *viz1, *viz2, *val, *completat;


void dfs1(int nod){
	viz1[nod]=1;
	for(auto x: v[nod]){
		if(!viz1[x])
		{
			dfs1(x);
		}
	}
	s.push(nod);
}

void dfs2(int nod){
	viz2[nod]=1;
	if(!completat[nod]){
		completat[nod]=1;
		val[nod]=0;
		completat[-nod]=1;
		val[-nod]=1;
		
	}
	else{
		if(val[nod]){
			cout<<-1;
			exit(0);
		}
	}
	for(auto x: v2[nod]){
		if(!viz2[x]){
			//rasp[nr].push_back(x);
			dfs2(x);
			
		}
	}
}
int main()
{
	cin>>n>>m;
	int x,y;
	v=aux+100005;
	v2=aux2+100005;
	viz1= aux_viz+100005;
	viz2=aux_viz2+100005;
	val= aux_val+100005;
	completat= aux_completat+100005;
	for(int i=1;i<=m;i++){
		cin>>x>>y;
		v[-x].push_back(y);
		v[-y].push_back(x);
		v2[y].push_back(-x);
		v2[x].push_back(-y);
	}
	for(int i=1;i<=n;i++){
		if(!viz1[i]){
			dfs1(i);
		}
	}
	while(!s.empty()){
		if(completat[s.top()]){
			s.pop();
			continue;
		}
		if(!viz2[s.top()]){
			//rasp[nr].push_back(s.top());
			dfs2(s.top());
		}
		s.pop();
	}
	for(int i=1;i<=n;i++){
			cout<<val[i]<<" ";
	}
	
	
}