Cod sursa(job #1977894)

Utilizator BlackLordFMI Alex Oprea BlackLord Data 6 mai 2017 13:39:43
Problema 2SAT Scor 100
Compilator cpp Status done
Runda Arhiva educationala Marime 1.2 kb
#include <fstream>
#include <vector>

using namespace std;

ifstream fin ("2sat.in");
ofstream fout ("2sat.out");

const int N1 = 100010, N2 = 200010;

int n, m, x, y, viz[N2], V[N2], val[N2], e[N2], E[N2], i;
vector<int> v[N2];

#define viz (viz + N1)
#define val (val + N1)
#define v (v + N1)

void dfs(int x) {
    viz[x] = 1;
    for (int i = 0; i < v[x].size(); ++i) {
        if (!viz[ v[x][i] ]) {
            dfs(v[x][i]);
        }
    }
    V[ ++V[0] ] = x;
}

int main () {
    fin >> n >> m;
    for (i = 1; i <= m; ++i) {
        fin >> x >> y;
        e[i] = x;
        E[i] = y;
        v[x].push_back(-y);
        v[y].push_back(-x);
    }
    for (i = 1; i <= n; i++) {
        if ( !viz[i] ) {
            dfs(i);
        }
    }
    int N = (n << 1);
    for (i = 1; i <= N; ++i) {
        if (!val[ V[i] ] && !val[ -V[i] ]) {
            val[ -V[i] ] = 1;
        }
    }
    for (i = 1; i <= m; ++i) {
        x = e[i];
        y = E[i];
        if ( (val[-x] && !val[y]) || (val[-y] && !val[x]) ) {
            fout << "-1";
            return 0;
        }
    }
    for (i = 1; i <= n; ++i) {
        fout << val[i] << " ";
    }
    return 0;
}