2-SAT

概念

SAT的全称是Satisfiability

Satisfiability,可满足性。

SAT问题就是要确定一个满足所有条件的方案或判断某方案是否合理。

举个栗子:

N 个国家,每个国家有M名代表,其中一些国家的一些代表有冲突。

现在这 N 个国家要召开会议,每个国家要派一名代表,且被派出的代表两两间没有冲突,求一个可行的方案。

这就是一个典型的SAT问题。

国家相当于条件,不同的代表相当于不同的情况。

上述的就是M-SAT问题,因为每个条件有M种情况。

同理,当每个条件都只有两种情况时,就是2-SAT问题。

为什么只研究2-SAT而不研究M更大的SAT问题呢?

因为当M3时,这是NP完全问题

算法

很简单,将有必选关系的点连边,然后枚举每个点跑一遍看有没有冲突就行了。

讲得太简单了?

那我再详细点:

还是像上面的那个问题,但规定 M 2(不是2就不是2-SAT问题)。

A 国的代表A1 B 国的代表B1有冲突,不难发现,如果国派的是 A1 ,那国只能派 B2 ,所以就在 A1B2 间连一条有向边从 A1 指向 B2 ,表示选 A1 就必选 B2 。同理,选 B1 必选 A2 ,这就是必选关系。

连好边之后就枚举每个还没确定代表(情况)国家(条件),随便选一个代表(情况),然后沿必选关系往下走,如果发现有冲突(访问某个国家的另一个代表也是必选的),就退出,换另一个代表试。如果两个代表都不行,

那你可能要问了,为什么是换这个国家的代表,不换之前选过的?

其实不难看出,这个图是对称的,所以换那个都无所谓(实在还不懂就自己建个图看一看,推一推)。

例题:UVaLive 3211(这里题解

  • 0
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值