poj3678 Katu Puzzle

Description

Katu Puzzle is presented as a directed graph G(VE) with each edge e(a, b) labeled by a boolean operator op (one of AND, OR, XOR) and an integer c (0 ≤ c ≤ 1). One Katu is solvable if one can find each vertex Vi a value Xi (0 ≤X≤ 1) such that for each edge e(a, b) labeled by op and c, the following formula holds:

 Xa op Xb = c

The calculating rules are:

AND01
000
101
OR01
001
111
XOR01
001
110

Given a Katu Puzzle, your task is to determine whether it is solvable.

Input

The first line contains two integers N (1 ≤ N ≤ 1000) and M,(0 ≤ M ≤ 1,000,000) indicating the number of vertices and edges.
The following M lines contain three integers (0 ≤ a < N), b(0 ≤ b < N), c and an operator op each, describing the edges.

Output

Output a line containing "YES" or "NO".

通过2-sat性质可知连接a->b可以看为:如果选择了ai,则必须也要选择bj。这里如果a and b=1时很明显a和b都不可能等于0。所以连接 a->a1,b->b1,以保证合法时a b一定取1。a or b==0的情况类似处理。
大致建图如下
    如果a and b==0。连接a1->b b1->a。
    如果a and b==1。连接a1->b1 b1->a1 a->a1,b->b1
    如果a or b==0。连接a1->a b1->b a1->b b1->a
    如果a or b==1。连接a->b1 b->a1
    如果a xor b==0。连接a->b1 a1->b b->a1 b1->a
    如果a xor b==1。连接a->b a1->b1 b->a b1->a'
建图完成后直接判断2-sat即可。

  • 3
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 2
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值