Pagini recente » Cod sursa (job #2083676) | Cod sursa (job #383779) | Cod sursa (job #3286864) | Istoria paginii runda/onis-2014-runda-1 | Cod sursa (job #3249833)
#include <bits/stdc++.h>
using namespace std;
const int dim = 1e5 + 55;
int n, m, x[dim], y[dim], counter, conex[2 * dim + 55];
bool sol[dim], ok = true;
vector<int> noduri[2 * dim + 55], nodurigt[2 * dim + 55];
bitset<2 * dim> viz;
stack<int> stiva;
void dfs(int nod) {
viz[nod] = 1;
for (auto it : noduri[nod]) {
if (!viz[it]) {
dfs(it);
}
}
stiva.push(nod);
}
int neg(int valu)
{
if(valu > n)
{
valu -= n;
}
else
{
valu += n;
}
return valu;
}
void dfsdoi(int nod) {
viz[nod] = 1;
if(sol[nod] == true)
{
ok = false;
}
sol[neg(nod)] = 1;
for (auto it : nodurigt[nod]) {
if (!viz[it]) {
dfsdoi(it);
}
}
}
ifstream fin("2sat.in");
ofstream fout("2sat.out");
int main() {
fin >> n >> m;
for (int i = 1; i <= m; ++i) {
fin >> x[i] >> y[i];
if(x[i] < 0)
{
x[i] = n - x[i];
}
if(y[i] < 0)
{
y[i] = n - y[i];
}
noduri[neg(x[i])].push_back(y[i]);
noduri[neg(y[i])].push_back(x[i]);
nodurigt[x[i]].push_back(neg(y[i]));
nodurigt[y[i]].push_back(neg(x[i]));
}
for (int i = 1; i <= n; ++i) {
if (!viz[x[i]]) dfs(x[i]);
if (!viz[y[i]]) dfs(y[i]);
if (!viz[neg(y[i])]) dfs(neg(y[i]));
if (!viz[neg(x[i])]) dfs(neg(x[i]));
}
viz.reset();
while (!stiva.empty()) {
int val = stiva.top();
stiva.pop();
if (!viz[val]) {
counter++;
dfsdoi(val);
}
}
if(ok == 1)
{
for(int i = 1; i <= n; ++i)
{
fout << sol[i] << " ";
}
}
return 0;
}