题目链接:http://codeforces.com/contest/776/problem/D


把每一个钥匙拆成两个点${x,x+m}$,分别表示选不选这把钥匙。

我们知道一扇门一定对应了两把钥匙。

设一扇门对应的要是分别为$u,v$,${link(x,y)}$表示点$x$向点$y$连边。

如果这扇门要操作一次,那就是两把当中选一把:${link(u,v+m),link(v,u+m)}$。这表示的是如果我选了拿第$u$把钥匙就不能拿第$v$把钥匙,如果我选了拿第$v$把钥匙就不能拿第$u$把钥匙

如果这扇门不要操作,那就是两把当中选两把或者都不选:${link(u+m,v+m),link(v,u)}$。这表示的是如果我选了拿第$u$把钥匙就一定要拿第$v$把钥匙,如果我不拿第$v$把钥匙就一定不能拿第$u$把钥匙

这个是无向边啊,并查集维护一下关系即可。

对于${1...m}$中的每一把钥匙,如果${x,x+m}$属于一个连通块就无解了,因为包含关系成环。


 #include<iostream>
#include<cstdio>
#include<algorithm>
#include<vector>
#include<cstdlib>
#include<cmath>
#include<cstring>
using namespace std;
#define maxn 2001000
#define llg int
#define yyj(a) freopen(a".in","r",stdin),freopen(a".out","w",stdout);
llg n,m,fa[maxn],k,c[maxn]; llg a[maxn][]; llg find(llg x) {if (fa[x]!=x) fa[x]=find(fa[x]); return fa[x];} void link(llg x,llg y)
{
llg f1=find(x),f2=find(y);
if (f2!=f1) fa[f2]=f1;
} int main()
{
yyj("D");
cin>>n>>m;
for (llg i=;i<=n;i++) scanf("%d",&c[i]);
for (llg i=;i<=m*;i++) fa[i]=i;
for (llg j=;j<=m;j++)
{
cin>>k;
llg x;
for (llg i=;i<=k;i++)
{
scanf("%d",&x);
a[x][++a[x][]]=j;
}
}
for (llg i=;i<=n;i++)
{
llg u=a[i][],v=a[i][];
if (!c[i]) link(u,v+m),link(u+m,v);else link(u,v),link(u+m,v+m);
}
for (llg i=;i<=m;i++) if (find(i)==find(i+m)) {cout<<"NO"; return ;}
cout<<"YES";
return ;
}

最新文章

  1. 安装redis
  2. MVC 知识点学习2
  3. 整理: Android HAL
  4. NGITOSS
  5. Eclipse Tomcat配置/管理/调试指南
  6. css中图片的四种地址引用
  7. C语言 百人拉百灯问题
  8. NFA与DFA
  9. CentOS 6.5 + Nginx 1.8.0 + PHP 5.6(with PHP-FPM) 负载均衡源码安装 之 (三)Nginx负载均衡配置
  10. 使用ARM模板在Azure中国大规模部署DCOS集群
  11. java Zip文件解压缩
  12. document.body is null
  13. port大全及port关闭方法
  14. Java JVM 请别拿“String s=new String(&quot;z&quot;);创建了多少实例”来面试 [ 转载 ]
  15. 网页设计——4.html基本标签链接,图片,表格
  16. A Simple Problem with Integers~POJ - 3468
  17. kali权限提升之本地提权
  18. 非关系数据库一Memcached
  19. ZooKeeper系列(4):ZooKeeper的配置文件详解
  20. Python-time模块-58

热门文章

  1. Hadoop学习笔记之一:Hadoop IPC
  2. zabbix实现电话、短信、邮件报警
  3. Inferred type &#39;S&#39; for type parameter &#39;S&#39; is not within its bound;
  4. weblogic11,linux字符页面安装
  5. 将表单序列化为JSON对象
  6. RTP/RTCP 和 SRTP/SRTCP协议(转)
  7. windows dhcp server
  8. centos/rhel 7 几个最重要变化(systemd,firewalld,networkmanager,文件系统)
  9. 头像上传uploadPreview插件
  10. centos6.8防火墙模块未加载