zoukankan      html  css  js  c++  java
  • 图论--2-SAT--poj 3678-Katu Puzzle(模板题)


    Description

    Katu Puzzle is presented as a directed graph G(V, E) 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 ≤ Xi ≤ 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:

    AND    0    1
    0    0    0
    1    0    1
    OR    0    1
    0    0    1
    1    1    1
    XOR    0    1
    0    0    1
    1    1    0
    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 a (0 ≤ a < N), b(0 ≤ b < N), c and an operator op each, describing the edges.

    Output

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

    Sample Input

    4 4
    0 1 1 AND
    1 2 1 OR
    3 2 0 AND
    3 0 0 XOR
    Sample Output

    YES
    Hint

    X0 = 1, X1 = 1, X2 = 0, X3 = 1.

    题意:给出N个布尔变量,每个变量要么真要么假。现在给出M个关系,问你是否存在一组解满足所有条件。

    思路:

    一:对于AND 

    1,c == 1时,则a和b全为真,建边 !a -> a 和 !b -> b;

    2,c == 0时,则a和b至少一个为假,建边 a -> !b 和 b -> !a;

    二:对于OR

    1,c == 1时,则a和b至少一个为真,建边!a -> b 和 !b -> a;

    2,c == 0时,则a和b全为假,建边a -> !a 和 b -> !b;

    三:对于XOD

    1,c == 1时,则a和b不同,建边!a -> b 、!b -> a、a -> !b 、 b -> !a;

    2,c == 0时,则a和b相同,建边a -> b 、b -> a、!a -> !b 、 !b -> !a;

    建好图,tarjan求SCC 判断是否矛盾即可。

     
  • 相关阅读:
    POJ
    hdu 5652
    CodeForces
    #6285. 数列分块入门 9
    #6284. 数列分块入门 8
    #6283. 数列分块入门 7
    #6282. 数列分块入门 6
    #6280. 数列分块入门 4 #6281. 数列分块入门 5
    #6278. 数列分块入门 2和#6278. 数列分块入门 3
    spark-sklearn TypeError: 'JavaPackage' object is not callable
  • 原文地址:https://www.cnblogs.com/lunatic-talent/p/12798599.html
Copyright © 2011-2022 走看看