Pagini recente » Cod sursa (job #281737) | Cod sursa (job #52784) | Cod sursa (job #3220944) | Cod sursa (job #161007) | Cod sursa (job #2297201)
#include <bits/stdc++.h>
using namespace std;
ifstream fin("2sat.in");
ofstream fout("2sat.out");
const int lim = 2e5;
vector <int> ad[lim + 1], adt[lim + 1], srt;
vector <vector<int>> ctc;
int comp[lim + 1];
bool viz[lim + 1];
inline int getit(int x){
return 2 * abs(x) - (x < 0);
}
void dfsi(int nod, int nr){
viz[nod] = true;
comp[nod] = nr;
for(auto fiu : adt[nod])
if(!viz[fiu])
dfsi(fiu, nr);
}
void dfs(int nod){
viz[nod] = true;
srt.push_back(nod);
for(auto fiu : ad[nod])
if(!viz[fiu])
dfs(fiu);
}
int main()
{
int n, m, x, y, ncomp = 0;
fin >> n >> m;
for(int i = 0; i < m; i++){
fin >> x >> y;
ad[getit(-x)].push_back(getit(y));
ad[getit(-y)].push_back(getit(x));
adt[getit(x)].push_back(getit(-y));
adt[getit(y)].push_back(getit(-x));
}
for(int i = 1; i <= 2 * n; i++)
if(!viz[i])
dfs(i);
reverse(srt.begin(), srt.end());
memset(viz, 0, lim + 1);
for(auto e : srt)
if(!viz[e])
dfsi(e, ncomp++);
for(int i = 1; i <= n; i++)
if(comp[2 * i] == comp[2 * i - 1]){
fout << "-1";
return 0;
}
for(int i = 1; i <= n; i++)
fout << (comp[2 * i] > comp[2 * i - 1]) << ' ';
return 0;
}