Cod sursa(job #473294)

Utilizator nicolaetitus12Nicolae Titus nicolaetitus12 Data 28 iulie 2010 16:21:24
Problema 2SAT Scor 0
Compilator cpp Status done
Runda Arhiva educationala Marime 0.94 kb
#include <cstdio>
#include <vector>
#define N 10000
#define M 10000
using namespace std;
vector<int> where[N];
vector<pair<int,int> >p;


int main ()
{int x,y;
 unsigned i,j,z,n,m;
 bool flag;
 freopen("2sat.in","r",stdin);
 freopen("2sat.out","w",stdout);
 
 scanf("%d %d",&n,&m);
 if(n>=32)return 0;
 
 for (i=1;i<=m;i++)
 {scanf("%d %d",&x,&y);
  p.push_back(make_pair(x,y));
  if(x<0)x=-x;
   where[x].push_back(p.size()-1);
  if(y<0)y=-y;
   where[y].push_back(p.size()-1);
 }
 
 z=1<<(n-1);
 for (int i=0;i<z;i++)
 {flag=1;
  for (j=0;j<p.size();j++)
  {bool t1,t2;
   t1=1<<(p[j].first >0?p[j].first :-p[j].first);
   t2=1<<(p[j].second>0?p[j].second:-p[j].second);
   
   if(p[j].first<0)
   {t1=1-t1;
   }
   if(p[j].second<0)
   {t2=1-t2;
   }
   if(t1&&t2)
   {flag=0;
    break;
   }
  }
  if(flag)
  {break;
  }
 }
 
 for (j=1;j<(1<<n);j<<=1)
 {printf("%d ",(i&j)&&1);
 }
 
 return 0;
}