2—SAT入门题—Party

题意:有n对夫妻被邀请参加一个聚会,因为场地的问题,每对夫妻中只有1人可以列席。在2n 个人中,某些人之间有着很大的矛盾(当然夫妻之间是没有矛盾的),有矛盾的2个人是不会同时出现在聚会上的。有没有可能会有n 个人同时列席?
输入:

n: 表示有n对夫妻被邀请 (n<= 1000) 
m: 表示有m 对矛盾关系 ( m < (n - 1) * (n -1)) 

在接下来的m行中,每行会有4个数字,分别是 A1,A2,C1,C2 
A1,A2分别表示是夫妻的编号 
C1,C2 表示是妻子还是丈夫 ,0表示妻子 ,1是丈夫 
夫妻编号从 0 到 n -1 

  
  
   
   Output
  
  
  
  
  
如果存在一种情况 则输出YES  否则输出 NO 
Sample Input
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
首先证明2SAT属于NL。 定义2SAT为:给定一个包含n个布尔变量的公式,每个变量的取值要么为真,要么为假,求判断这个公式是否有一个满足条件的布尔变量取值。可以证明2SAT可以转化为一个有向图,对于每个变量,建立两个点,分别表示它的真和假,对于每个子句(x ∨ y),建立两条有向边(¬x, y)和(¬y, x),表示如果x为假,则y必须为真,如果y为假,则x必须为真。然后,对于每个点x,求它的强连通分量,检查是否存在一个强连通分量,它同时包含x和¬x,如果存在这样的强连通分量,则2SAT无解,否则有解。 可以证明,这个算法可以在NL中实现。因为我们可以使用非确定性图遍历算法(如BFS),依次遍历每个点的强连通分量,并检查是否存在包含x和¬x的强连通分量。这个算法的空间复杂度为O(n),因此,2SAT属于NL。 接着证明PATH ≤L 2SAT。 定义PATH问为:给定一个有向图G和两个节点s和t,求是否存在一条从s到t的路径。我们可以将PATH问转化为2SAT。对于图G中的每个节点v,建立两个变量xv和¬xv,表示节点v是否在路径中。对于每条有向边(u, v),添加两个子句(¬xu, xv)和(¬xv, xu),表示如果节点u在路径中,则节点v也必须在路径中。然后,添加两个子句(xs, ¬xt)和(¬xs, xt),表示起点s必须在路径中,终点t不能在路径中。对于每个节点v,添加子句(xv, ¬¬xv),表示节点v必须为真或者路径中没有包含它。最后,将所有子句联合起来,求解2SAT。 可以证明,如果2SAT有解,那么就存在一条从s到t的路径。因为有解意味着存在一种变量取值,使得每个子句都至少有一个变量为真。对于每个节点v,如果xv为真,那么节点v在路径中,否则节点v不在路径中。因为路径中的每个节点都满足条件,所以从s到t存在一条路径。 另一方面,如果存在一条从s到t的路径,那么2SAT有解。因为存在一条从s到t的路径,可以将路径上的节点全部标记为真,其他节点全部标记为假。对于每个子句(x ∨ y),如果x为假,则y必须为真,否则x必须为真。因为路径上的每个节点都满足条件,所以2SAT有解。 因此,可以得出PATH ≤L 2SAT的结论,即2SAT是NL-complete的。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值