bzoj 2199: [Usaco2011 Jan]奶牛议会【2-SAT】
2024-08-22 20:40:35
好久没写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;
}
最新文章
- SQLSERVER截取字符串
- Yii的学习(1)--安装配置
- shipyard安装
- mysql rand()产生随机整数范围及方法
- js “+” 连接字符串&;数字相加 数字相加出现多位小数 函数调用单引号双引号嵌套和转义字符的使用
- PHP 错误与异常 笔记与总结(11 )register_shutdown_function() 函数的使用
- ThinkPHP中的三大自动简介
- ASP.NET Core文档中Work with Data章节的翻译目录
- HDU5086——Revenge of Segment Tree(BestCoder Round #16)
- [HDOJ2473]Junk-Mail Filter(并查集,删除操作,马甲)
- 1.引入必要的文件 2.加载 UI 组件的方式 4.Parser 解析器
- 南阳OJ-2-括号配对问题---栈的应用
- PHP7 学习笔记(十一)使用phpstudy快速配置一个虚拟主机
- IIC_slaver 的仿真之路
- Spring集成shiro做登陆认证
- linux(ubuntu)下安装phantomjs
- hbase 调试各种报错
- WAS启动报错Service failed to start. startServer return code = -1
- ipmitool命令详解
- vue各生命周期适合做的业务逻辑
热门文章
- noip模拟赛 写代码
- [ C++ 快速高精度模板 ] [ BigN类 ] 大整数类 高精度 模板 BigInt FFT 快速傅里叶变换
- 2018/2/14 x-pack的学习
- Query on a string
- csu1364 Interview
- Caocao&#39;s Bridges-HDU4738(Tarjin+求桥)
- Ubuntu 16.04安装Atom(加强版文本工具)
- JSP基础教程:tutorialspoint-jsp
- Visual studio 2008 的语法高亮插件 WordLight
- 11种常见sqlmap使用方法