好久没写2-SAT了啊,还以为是网络流

设点x为选,x'为不选,因为一头牛至少要满足一个条件,所以对于牛条件的两个点,选了一个不符合的点,就要选另一个符合的点,这样连两条边

然后枚举所有议案的选和不选点,从当前枚举的点出发,dfs一遍,把经过的点都打上标记,然后判断当前枚举的点是否合法(没有一个议案的选和不选点都被dfs到),如果选和不选点都不合法就退出,输出impossible;都合法就输出?;只有一个合法就输出相对的选或不选

#include<iostream>
#include<cstdio>
using namespace std;
const int N=2005,inf=1e9;
const char ha[]={'?','N','Y'};
int n,m,h[N],cnt,v[N],ti,ans[N];
struct qwe
{
int ne,to,va;
}e[N*20];
int read()
{
int r=0,f=1;
char p=getchar();
while(p>'9'||p<'0')
{
if(p=='Y')
return 1;
if(p=='N')
return 0;
p=getchar();
}
while(p>='0'&&p<='9')
{
r=r*10+p-48;
p=getchar();
}
return r*f;
}
void add(int u,int v)
{
cnt++;
e[cnt].ne=h[u];
e[cnt].to=v;
h[u]=cnt;
}
void dfs(int u)
{
v[u]=ti;
for(int i=h[u];i;i=e[i].ne)
if(v[e[i].to]!=ti)
dfs(e[i].to);
}
bool ok(int u)
{
ti++;
dfs(u);
for(int i=1;i<=n;i++)
if(v[i]==ti&&v[i+n]==ti)
return 0;
return 1;
}
int main()
{
n=read(),m=read();
for(int i=1;i<=m;i++)
{
int x=read(),xx=read(),y=read(),yy=read();
add(x+(xx^1)*n,y+yy*n),add(y+(yy^1)*n,x+xx*n);
}
for(int i=1;i<=n;i++)
{
bool p=ok(i+n),q=ok(i);
if(!p&&!q)
{
puts("IMPOSSIBLE");
return 0;
}
else if(p&&q)
ans[i]=0;
else if(!p)
ans[i]=1;
else
ans[i]=2;
}
for(int i=1;i<=n;i++)
printf("%c",ha[ans[i]]);
return 0;
}

最新文章

  1. SQLSERVER截取字符串
  2. Yii的学习(1)--安装配置
  3. shipyard安装
  4. mysql rand()产生随机整数范围及方法
  5. js “+” 连接字符串&amp;数字相加 数字相加出现多位小数 函数调用单引号双引号嵌套和转义字符的使用
  6. PHP 错误与异常 笔记与总结(11 )register_shutdown_function() 函数的使用
  7. ThinkPHP中的三大自动简介
  8. ASP.NET Core文档中Work with Data章节的翻译目录
  9. HDU5086——Revenge of Segment Tree(BestCoder Round #16)
  10. [HDOJ2473]Junk-Mail Filter(并查集,删除操作,马甲)
  11. 1.引入必要的文件 2.加载 UI 组件的方式 4.Parser 解析器
  12. 南阳OJ-2-括号配对问题---栈的应用
  13. PHP7 学习笔记(十一)使用phpstudy快速配置一个虚拟主机
  14. IIC_slaver 的仿真之路
  15. Spring集成shiro做登陆认证
  16. linux(ubuntu)下安装phantomjs
  17. hbase 调试各种报错
  18. WAS启动报错Service failed to start. startServer return code = -1
  19. ipmitool命令详解
  20. vue各生命周期适合做的业务逻辑

热门文章

  1. noip模拟赛 写代码
  2. [ C++ 快速高精度模板 ] [ BigN类 ] 大整数类 高精度 模板 BigInt FFT 快速傅里叶变换
  3. 2018/2/14 x-pack的学习
  4. Query on a string
  5. csu1364 Interview
  6. Caocao&#39;s Bridges-HDU4738(Tarjin+求桥)
  7. Ubuntu 16.04安装Atom(加强版文本工具)
  8. JSP基础教程:tutorialspoint-jsp
  9. Visual studio 2008 的语法高亮插件 WordLight
  10. 11种常见sqlmap使用方法