Pagini recente » Cod sursa (job #3123053) | Cod sursa (job #106563) | Cod sursa (job #221858) | Cod sursa (job #1723004) | Cod sursa (job #569664)
Cod sursa(job #569664)
#include <stdio.h>
#include <stdlib.h>
#include <time.h>
#define MAX 100001
struct vector
{
int x,y;
}v[MAX*2];
char use[MAX];
char x[MAX*2],y[MAX*2];
int main()
{
int N,M,i,end,pos,pos1,pos2;
freopen("2sat.in","r",stdin);
scanf("%d%d",&N,&M);
for(i=1;i<=M;i++)
{
scanf("%d%d",&v[i].x,&v[i].y);
x[i]=1;
y[i]=1;
if(v[i].x<0) x[i]=-1;
if(v[i].y<0) y[i]=-1;
}
srand(time(NULL));
for(i=1;i<=N;i++) use[i]=rand()%2;
end=0;
while(!end)
{
end=1;
pos1=rand()%M+1;
pos2=rand()%(M-pos1+1)+pos1;
for(i=1;i<pos1;i++)
if(x[i]<0&&y[i]<0)
if(!use[v[i].x*x[i]]==0&&!use[v[i].y*y[i]]==0)
{
end=0;
break;
}
else;
else
if(x[i]<0&&y[i]>0)
if(!use[v[i].x*x[i]]==0&&use[v[i].y]==0)
{
end=0;
break;
}
else;
else
if(x[i]>0&&y[i]<0)
if(use[v[i].x]==0&&!use[v[i].y*y[i]]==0)
{
end=0;
break;
}
else;
else
if(x[i]>0&&y[i]>0)
if(use[v[i].x]==0&&use[v[i].y]==0)
{
end=0;
break;
}
if(end)
for(i=pos1;i<pos2;i++)
if(x[i]<0&&y[i]<0)
if(!use[v[i].x*x[i]]==0&&!use[v[i].y*y[i]]==0)
{
end=0;
break;
}
else;
else
if(x[i]<0&&y[i]>0)
if(!use[v[i].x*x[i]]==0&&use[v[i].y]==0)
{
end=0;
break;
}
else;
else
if(x[i]>0&&y[i]<0)
if(use[v[i].x]==0&&!use[v[i].y*y[i]]==0)
{
end=0;
break;
}
else;
else
if(x[i]>0&&y[i]>0)
if(use[v[i].x]==0&&use[v[i].y]==0)
{
end=0;
break;
}
if(end)
for(i=pos2;i<=M;i++)
if(x[i]<0&&y[i]<0)
if(!use[v[i].x*x[i]]==0&&!use[v[i].y*y[i]]==0)
{
end=0;
break;
}
else;
else
if(x[i]<0&&y[i]>0)
if(!use[v[i].x*x[i]]==0&&use[v[i].y]==0)
{
end=0;
break;
}
else;
else
if(x[i]>0&&y[i]<0)
if(use[v[i].x]==0&&!use[v[i].y*y[i]]==0)
{
end=0;
break;
}
else;
else
if(x[i]>0&&y[i]>0)
if(use[v[i].x]==0&&use[v[i].y]==0)
{
end=0;
break;
}
if(!end)
{
pos=rand()%2;
if(!pos) use[v[i].x*x[i]]=!use[v[i].x*x[i]];
else use[v[i].y*y[i]]=!use[v[i].y*y[i]];
}
}
freopen("2sat.out","w",stdout);
for(i=1;i<N;i++) printf("%d ",use[i]);
printf("%d\n",use[N]);
return 0;
}