标题效果:有着n材料的种类,m陪审团。

每种材料具有两种不同的方法。每个法官都有两个标准。做出来的每一个法官的菜必须至少满足一个需求。

问:是否有这样一个程序。

思考:2-SAT经典的内置图形问题。因为每种材料只能有两种方法,约束条件通常就想到2-SAT。每个评委必须至少满足一种。这就是建图的条件。

所以连边A‘ -> B

B’ -> A

这样表示的是假设A不能满足某个评委,那么就必须让b满足这个评委。

然后就是Tarjan缩点,推断是否有个菜品的两种做法在一个scc中,若有就是无解,没有就是有解。

CDOE:

#include <cstdio>
#include <cstring>
#include <iostream>
#include <algorithm>
#define MAX 5010
using namespace std; int cases;
int points,cnt; int head[MAX],_total;
int _next[MAX],aim[MAX]; int dfn[MAX],low[MAX],total;
int stack[MAX],top;
bool in_stack[MAX];
int changed[MAX],scc; char c1,c2; inline void Initialize();
inline void Add(int x,int y);
void Tarjan(int x); int main()
{
for(cin >> cases;cases; --cases) {
scanf("%d%d",&points,&cnt);
Initialize();
for(int x,y,i = 1;i <= cnt; ++i) {
getchar();
scanf("%c%d %c%d",&c1,&x,&c2,&y);
x = (x << 1) + (c1 == 'h');
y = (y << 1) + (c2 == 'h');
Add(x^1,y);
Add(y^1,x);
}
for(int i = 2;i <= (points << 1|1); ++i)
if(!dfn[i]) Tarjan(i);
bool flag = true;
for(int i = 1;i <= points; ++i)
if(changed[i << 1] == changed[i << 1|1])
flag = false;
if(flag) puts("GOOD");
else puts("BAD");
}
return 0;
} inline void Initialize()
{
total = _total = top = scc =0;
memset(dfn,0,sizeof(dfn));
memset(head,0,sizeof(head));
memset(in_stack,false,sizeof(in_stack));
} inline void Add(int x,int y)
{
_next[++_total] = head[x];
aim[_total] = y;
head[x] = _total;
} void Tarjan(int x)
{
dfn[x] = low[x] = ++total;
stack[++top] = x;
in_stack[x] = true;
for(int i = head[x];i;i = _next[i]) {
if(!dfn[aim[i]])
Tarjan(aim[i]),low[x] = min(low[x],low[aim[i]]);
else if(in_stack[aim[i]])
low[x] = min(low[x],dfn[aim[i]]);
}
if(low[x] == dfn[x]) {
scc++;
int temp;
do {
temp = stack[top--];
changed[temp] = scc;
in_stack[temp] = false;
}while(temp != x);
}
}

版权声明:本文博主原创文章,博客,未经同意不得转载。

BZOJ 1823 JSOI 2010 盛宴 2-SAT的更多相关文章

  1. [BZOJ 1032][JSOI 2007]祖玛 题解(区间DP)

    [BZOJ 1032][JSOI 2007]祖玛 Description https://www.lydsy.com/JudgeOnline/problem.php?id=1032 Solution ...

  2. [BZOJ 1013][JSOI 2008] 球形空间产生器sphere 题解(高斯消元)

    [BZOJ 1013][JSOI 2008] 球形空间产生器sphere Description 有一个球形空间产生器能够在n维空间中产生一个坚硬的球体.现在,你被困在了这个n维球体中,你只知道球 面 ...

  3. bzoj 1823: [JSOI2010]满汉全席 && bzoj 2199 : [Usaco2011 Jan]奶牛议会 2-sat

    noip之前学的内容了,看到题竟然忘了怎么建图了,复习一下. 2-sat 大概是对于每个元素,它有0和1两种选择,必须选一个但不能同时选.这之间又有一些二元关系,比如x&y=1等等... 先把 ...

  4. [BZOJ 2006] [NOI 2010]超级钢琴(贪心+ST表+堆)

    [BZOJ 2006] [NOI 2010]超级钢琴(贪心+ST表+堆) 题面 给出一个长度为n的序列,选k段长度在L到R之间的区间,一个区间的值等于区间内所有元素之的和,使得k个区间的值之和最大.区 ...

  5. BZOJ 1823 满汉全席

    Description 满汉全席是中国最丰盛的宴客菜肴,有许多种不同的材料透过满族或是汉族的料理方式,呈现在數量繁多的菜色之中.由于菜色众多而繁杂,只有极少數博学多闻技艺高超的厨师能够做出满汉全席,而 ...

  6. BZOJ 1823: [JSOI2010]满汉全席( 2-sat )

    2-sat...假如一个评委喜好的2样中..其中一样没做, 那另一样就一定要做, 这样去建图..然后跑tarjan. 时间复杂度O((n+m)*K) ------------------------- ...

  7. bzoj 1818 [CQOI 2010] 内部白点 - 扫描线 - 树状数组

    题目传送门 快速的列车 慢速的列车 题目大意 一个无限大的方格图内有$n$个黑点.问有多少个位置上下左右至少有一个黑点或本来是黑点. 扫描线是显然的. 考虑一下横着的线段,取它两个端点,横坐标小的地方 ...

  8. 2-sat基础题 BZOJ 1823

    http://www.lydsy.com/JudgeOnline/problem.php?id=1823 1823: [JSOI2010]满汉全席 Time Limit: 10 Sec  Memory ...

  9. BZOJ 1016 JSOI 2008 最小生成树计数 Kruskal+搜索

    题目大意:给出一些边,求出一共能形成多少个最小生成树. 思路:最小生成树有非常多定理啊,我也不是非常明确.这里仅仅简单讲讲做法.关于定各种定理请看这里:http://blog.csdn.net/wyf ...

随机推荐

  1. 如何解决Windows8.1(32bit&amp;64bit)下Cisco VPN Client拨号时报442错误的问题

    Cisco VPN Cient大多数网络管理员.技术支持project最流行的教师和最终用户VPNclient一间.对于外部网络访问内部网络,技术类人员. 随着Windows8.1的推出.Cisco ...

  2. 线程锁的概念函数EnterCriticalSection和LeaveCriticalSection的使用方法

    线程锁的概念函数EnterCriticalSection和LeaveCriticalSection的使用方法 注:使用结构CRITICAL_SECTION 需增加头文件#include “afxmt. ...

  3. 王立平--include在Android应用

    它包括一个布局和布局 1.在layout确定activity_other.xml布局 2.代码中的包括例如以下: <LinearLayout xmlns:android="http:/ ...

  4. Hdu 5256 系列转换

    主题链接: HDU5236 代码: #include<iostream> #include<cstdio> #include<cstring> #include&l ...

  5. VMWare网络设置的3中方式(转)

    一 VMware网络设置的三种方式 1 Host-only连接方式  让虚机具有与宿主机不同的各自独立IP地址,但与宿主机位于不同网段,同时为宿主主机新增一个IP地址,且保证该IP地址与各虚机IP地址 ...

  6. Dom操作高级应用

    table tBodies,tHead,tFoot,rows,cells 一个table有多个tbody oTab.tBodies[0].rows[i].style.background = &quo ...

  7. 《编程简介(Java) &#183;10.3递归思想》

    <编程简介(Java) ·10.3递归思想> 10.3.1 递归的概念 以两种方式的人:男人和女人:算法是两种:递归迭代/通知: 递归方法用自己的较简单的情形定义自己. 在数学和计算机科学 ...

  8. 理解JavaScript的闭包

    在JS这块,免不了被问什么是闭包. 从一个常见的循环问题说起. 有一个ul列表, 里面有5个li标签,我希望点击每个li标签的时候,弹出每个li标签对应的索引值(第一个弹出0,第二个弹出1...). ...

  9. Apple Watch 1.0 开发介绍 1.3 简介 WatchKit App 架构

    WatchKit app和WatchKit extension一起实现了app的界面.当用户在Apple Watch中操作时,WatchKit app从storyboards中选择合适的场景.比如,如 ...

  10. LR杂记 - loadrunner各项指标结果分析

    Transactions (用户事务分析) 用户事务分析是站在用户角度进行的基础性能分析. 1 . Transation Sunmmary (事务综述) 对事务进行综合分析是性能分析的第一步,通过分析 ...