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的问题一样了,好像这个问题还可以用并查集来做(雾)、

  • 相关阅读:
    SAP CRM WebClient UI上将text area里的文本清空的后台处理
    SAP Business Application Studio的权限控制
    Git安装与配置——详细教程1
    如何在Windows平台下安装配置Memcached
    详解PHP操作Memcache缓存技术提高响应速度的方法
    PHP开发小技巧②—实现二维数组根据key进行排序
    PHP开发小技巧③—实现多维数组转化为一维数组
    PHP开发小技巧①①—php实现手机号码显示部分
    curl实例-通过新浪股票接口获取股票信息
    中国菜刀的功能介绍和使用方法
  • 原文地址:https://www.cnblogs.com/Heilce/p/6476406.html
Copyright © 2011-2022 走看看