zoukankan      html  css  js  c++  java
  • D. The Door Problem

    Moriarty has trapped n people in n distinct rooms in a hotel. Some rooms are locked, others are unlocked. But, there is a condition that the people in the hotel can only escape when all the doors are unlocked at the same time. There are m switches. Each switch control doors of some rooms, but each door is controlled by exactly two switches.

    You are given the initial configuration of the doors. Toggling any switch, that is, turning it ON when it is OFF, or turning it OFF when it is ON, toggles the condition of the doors that this switch controls. Say, we toggled switch 1, which was connected to room 1, 2 and 3 which were respectively locked, unlocked and unlocked. Then, after toggling the switch, they become unlocked, locked and locked.

    You need to tell Sherlock, if there exists a way to unlock all doors at the same time.

    Input

    First line of input contains two integers n and m (2 ≤ n ≤ 105, 2 ≤ m ≤ 105) — the number of rooms and the number of switches.

    Next line contains n space-separated integers r1, r2, ..., rn (0 ≤ ri ≤ 1) which tell the status of room doors. The i-th room is locked if ri = 0, otherwise it is unlocked.

    The i-th of next m lines contains an integer xi (0 ≤ xi ≤ n) followed by xi distinct integers separated by space, denoting the number of rooms controlled by the i-th switch followed by the room numbers that this switch controls. It is guaranteed that the room numbers are in the range from 1 to n. It is guaranteed that each door is controlled by exactly two switches.

    Output

    Output "YES" without quotes, if it is possible to open all doors at the same time, otherwise output "NO" without quotes.

    Examples
    input
    3 3
    1 0 1
    2 1 3
    2 1 2
    2 2 3
    output
    NO
    input
    3 3
    1 0 1
    3 1 2 3
    1 2
    2 1 3
    output
    YES
    input
    3 3
    1 0 1
    3 1 2 3
    2 1 2
    1 3
    output
    NO

    太久没有做过图论的东西,真的是我的锅,这种垃圾的2-SAT都能写错,我也是真的很服气啊。
    注意两个问题第一就是模板的问题,第二还是模板的问题,反正。

     有个地方是这样写的,还有就是{ void add(int x,int xval,int y,int yval) } 这个加的边就是xUy的边,所以说千万别加边加错了。

    然后这个问题就是和普通的2-sat的问题一样了,好像这个问题还可以用并查集来做(雾)、

  • 相关阅读:
    VMware Workstation 14 Pro永久激活密钥
    maven属性、profile、资源过滤、不同环境构建项目
    控制返回前台字段
    jsonp 返回以前必须要再转一次json
    doPost方法不支持 a 标签和地址栏直接输入地址访问
    设置响应头控制浏览器的缓存
    获取请求头、设置响应头、设置缓冲区
    重定向与错误发送
    文件下载
    web 应用响应乱码问题
  • 原文地址:https://www.cnblogs.com/Heilce/p/6476406.html
Copyright © 2011-2022 走看看