hdu 4421 Bit Magic(two-SAT+思维)(二)
];
int main()
{
int i,j,n,u,v,base,p;
bool op,flag;
while(~scanf("%d",&n))
{
for(i=0;i
for(j=0;j
scanf("%d",&B[i][j]);
for(p=0,base=1;p<32;p++)//分别看二进制第p位是否冲突。若每一位都不冲突。肯定就有合法解
{
tool.init(n);
for(i=0;i
{
for(j=i+1;j
{
op=B[i][j]&base;//取出第p位
if((i&1)&&(j&1))
{
for(u=0;u<2;u++)
for(v=0;v<2;v++)
if((u|v)!=op)
tool.adde(i,u,j,v);
}
else if(!(i&1)&&!(j&1))
{
for(u=0;u<2;u++)
for(v=0;v<2;v++)
if((u&v)!=op)
tool.adde(i,u,j,v);
}
else
{
for(u=0;u<2;u++)
for(v=0;v<2;v++)
if((u^v)!=op)
tool.adde(i,u,j,v);
}
}
}
flag=tool.solve();
if(!flag)
break;
base<<=1;
}
if(flag)
printf("YES\n");
else
printf("NO\n");
}
return 0;
}