Pagini recente » Cod sursa (job #45358) | Cod sursa (job #68318) | Cod sursa (job #908990) | Cod sursa (job #2923478) | Cod sursa (job #1977894)
#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;
}