Pagini recente » Cod sursa (job #2736117) | Cod sursa (job #2550294) | Cod sursa (job #2576541) | Cod sursa (job #1591335) | Cod sursa (job #2219820)
#include <fstream>
#include <cstdlib>
using namespace std;
ifstream fi("2sat.in");
ofstream fo("2sat.out");
int n,m;
int P[200001][2];
int X[200001];
int modul(int x)
{
if (x>=0)
return x;
return -x;
}
int main()
{
fi>>n>>m;
for (int i=1;i<=m;i++)
{
int a,b,c;
fi>>a>>b>>c;
if (c==0)
{
P[i][0]=a;
P[i][1]=b;
}
if (c==1)
{
P[i][0]=a;
P[i][1]=-b;
}
if (c==2)
{
P[i][0]=-a;
P[i][1]=b;
}
if (c==3)
{
P[i][0]=-a;
P[i][1]=-b;
}
}
/// se dau valori 1 tuturor variabilelor
for (int i=1;i<=n;i++)
X[i]=1;
while (1)
{
int poz=0;
for (int i=1;i<=m;i++)
{
int a,b;
if (P[i][0]>0)
a=X[P[i][0]];
else
a=1-X[-P[i][0]];
if (P[i][1]>0)
b=X[P[i][1]];
else
b=1-X[-P[i][1]];
if (a==0 && b==0)
{
poz=i;
break;
}
}
if (poz==0)
break;
int v;
v=rand()%2;
X[modul(P[poz][v])]=1-X[modul(P[poz][v])];
}
int rez;
rez=0;
for (int i=1;i<=n;i++)
if (X[i]==1)
fo << X[2*i] << " ";
/*fo<<rez<<"\n";
for (int i=1;i<=n;i++)
if (X[i]==1)
fo<<i<<"\n";*/
fi.close();
fo.close();
return 0;
}