处女座与宝藏

2024-06-17 20:48
文章标签 宝藏 处女座

本文主要是介绍处女座与宝藏,希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!

【题目描述】

处女座进行了一次探险,发现了一批宝藏。如果他获得这批宝藏,那么他一辈子都不需要工作了。但是处女座遇到了一个难题。

宝藏被装在n个宝箱里,宝箱编号为1,2,…,n,只有所有宝箱在某一时间被打开,处女座才能获得宝藏。有m个开关,每个开关控制k个宝箱,如果按下一个开关,那么这k个宝箱的开关状态都会发生改变(从开启变成关闭,从关闭变成开启),处女座想知道他能否获得这批宝藏。

【输入描述】

第一行两个正整数n,m,

第二行n个整数,每个整数为0或1,表示初始时宝箱的状态,0表示开启,1表示关闭

接下来m行,每行开头一个整数k表示这个开关控制的宝箱的个数,接下来k个整数,表示控制宝箱的编号

1<=n,m<=200000

1<=k<=n

题目保证每个宝箱最多被两个开关控制。

【输出描述】

一行,如果处女座能获得宝藏,输出”YES”,否则输出”NO”

【样例】

示例1

输入
4 4
1 0 1 1
2 3 4
2 1 3
1 2
2 1 2
输出
YES

思路:2-SAT

每个开关有两种状态,按或不按,并且两者一旦选择其中一种,那么就一定要选择其他开关的状态使得宝藏开启,可以发现,宝藏其实是用来建边的

由于每个锁最多被 k 个开关控制,因此可以对没有控制的锁直接进行判断:

  • 被一个开关控制的锁:取 1 或取 0
  • 被两个开关控制的锁:取 00 或取 11 或取 01 或取 10

根据 m 个限制条件进行建图,建图完成后 Tarjan 缩点,然后判断两个对立的点是否在同一个块中,若在同一个块则无解,反之则有解

【源代码】

#include<iostream>
#include<cstdio>
#include<cstdlib>
#include<string>
#include<cstring>
#include<cmath>
#include<ctime>
#include<algorithm>
#include<utility>
#include<stack>
#include<queue>
#include<vector>
#include<set>
#include<map>
#define PI acos(-1.0)
#define E 1e-6
#define MOD 1000000007
#define INF 0x3f3f3f3f
#define N 1000001
#define LL long long
using namespace std;struct Edge{int to,next;
}edge[N];
int head[N],cnt;
int n,m;
int a[N];
vector<int> G[N];
int low[N],dfn[N],belong[N];
int time_block;
int scc;
int Stack[N],top;
bool vis[N];
int num[N];void Tarjan(int u){low[u]=dfn[u]=++time_block;Stack[top++]=u;vis[u]=true;int v;for(int i=head[u];i != -1;i = edge[i].next){v=edge[i].to;if(!dfn[v]){Tarjan(v);if(low[u]>low[v])low[u]=low[v];}else if(vis[v]&&low[u]>dfn[v])low[u]=dfn[v];}if(low[u]==dfn[u]){scc++;do{v=Stack[--top];vis[v]=false;belong[v]=scc;num[scc]++;}while(v!=u);}
}
void addEdge(int next,int to){//添边edge[cnt].to=to;edge[cnt].next=head[next];head[next]=cnt++;
}
int main(){memset(head,-1,sizeof(head));cnt=0;cin>>n>>m;for(int i=1;i<=n;i++)cin>>a[i];for(int i=1;i<=m;i++){int k;cin>>k;for(int j=1;j<=k;j++){int x;cin>>x;G[x].push_back(i);}}for(int i=1;i<=n;i++){int len=G[i].size();if(len==0){//初始条件if(a[i]==1){addEdge(0,0);addEdge(1,1);}}else if(len==1){//被一个锁控制int temp=G[i][0]<<1;if(a[i]==1)addEdge(temp,temp^1);elseaddEdge(temp^1,temp);}else if(len==2){//被两个锁控制int x=G[i][0]<<1;int y=G[i][1]<<1;if(a[i]==1){addEdge(x,y^1);addEdge(y,x^1);addEdge(x^1,y);addEdge(y^1,x);}else{addEdge(x,y);addEdge(y,x);addEdge(x^1,y^1);addEdge(y^1,x^1);}}}memset(dfn,0,sizeof(dfn));memset(vis,false,sizeof(vis));memset(num,0,sizeof(num));time_block=0;scc=top=0;for(int i=0;i<(m<<1);i++)if(!dfn[i])Tarjan(i);bool flag=true;for(int i=0;i<(m<<1);i+=2)if(belong[i]==belong[i^1])//判断是否在同一个块中flag=false;if(flag)printf("YES\n");elseprintf("NO\n");return 0;
}

 

这篇关于处女座与宝藏的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!



http://www.chinasem.cn/article/1070461

相关文章

moonlight串流配置太复杂?推荐一款无需配置的宝藏串流软件GameViewer远程

moonlight支持将PC游戏实时串流到安卓、iOS、Apple TV、Chromebook、PS Vita甚至Raspberry Pi等设备上,让用户无需携带笨重的游戏设备,即可随时随地进行游戏。 但是moonlight的门槛较高,很多串流新手不懂得如何配置,同时如果没有IPV6内网穿透则无法使用,这也是很多玩家想尝试moonlight但是被复杂的设置劝退了的原因。如果你因为配置门

宝藏!《联盟自控强化班洗髓题库》(青龙篇) 1-9章:甄选部分

本文内容,全部选自自动化考研联盟的:初试《自控强化班洗髓题库》(青龙篇)。 目录 Part1:资料封面&目录 Part2:资料各个章节具体内容 第1章 自动控制的一般概念 第2章 控制系统的数学模型 第3章 线性系统的时域分析 第4章 线性系统的根轨迹法 第5章 线性系统的频域分析法 第6章 线性系统的校正方法 第7章 线性离散系统的分析与校正 第8章 非线性控制系统分析

员工微信聊天敏感词报警系统是什么?好用的企业敏感词告警系统推荐(宝藏收藏篇)

"风起于青萍之末,浪成于微澜之间。"  在信息如潮的今日,一句不经意的言辞,或许就隐藏着企业安全的隐患。 员工微信聊天敏感词报警系统,正是这风起云涌中的一道坚实防线,它如同敏锐的哨兵,时刻监控着信息的流向,确保企业的每一份机密都能得到妥善保护。 本文将深入解析这一系统,并为您推荐一款宝藏级的企业敏感词告警系统——安企神。 员工微信聊天敏感词报警系统是什么? 员工微信聊天敏感词报警系统,

常见的电脑加密方式|文件加密解密工具分享(宝藏篇)

无论是个人隐私的保护,还是企业核心数据的安全,都离不开有效的加密技术。 电脑加密,作为信息安全防护的第一道防线,其重要性不言而喻。 本文将深入探讨几种常见的电脑加密方式,并分享几款高效的文件加密解密工具,帮助您更好地守护数据安全。 一、常见的电脑加密方式 1. 磁盘加密 磁盘加密,又称全盘加密,是一种对整个硬盘或分区进行加密的技术。它通过在操作系统启动前就对磁盘进行解锁,确保即使物理

什么牌子的开放式耳机性价比高?五大宝藏款式推荐!

耳机技术不断演进,开放式耳机因其开放耳道设计,受到市场青睐。这种设计不仅提升了佩戴舒适度,还增加了户外运动的安全性,允许用户在享受音乐时保持对周围环境的感知。 面对众多品牌,选择时要考虑音质、舒适度及附加功能。此外,考虑防水、续航和智能模式等特性也很重要。用户应依据个人需求和偏好,挑选适合自己的开放式耳机,以确保健康和安全的听觉体验。小编近期特意整理了开放式耳机六条选购技巧,并为你找到了五款热门

百元蓝牙耳机什么牌子的好?四大宝藏机型真实推荐,快速收藏!

作为一位蓝牙耳机爱好者,无论是上班、娱乐、学习我都离不开蓝牙耳机。通勤时候能听听音乐,是最好的享受,可以让我更加放松,尽情享受音乐带来的乐趣。但市面上的大多数蓝牙耳机都是货不对板的,不是音质一般、就是续航时间短,那么想要一款百元蓝牙耳机什么牌子的好?这里给大家带来四大宝藏机型真实推荐,快速收藏! 百元蓝牙耳机什么牌子的好?四大宝藏机型真实推荐,快速收藏! 1、西圣AVA2蓝牙耳机 售

【Windows】被遗忘的宝藏:Windows 10 LTSC 2021 官方精简版

当Windows 11如火如荼地推广之际,许多用户开始怀念Windows 10带来的流畅体验。虽然Windows 11以其现代化的界面和改进的性能吸引了不少用户,但在实际使用中,一些用户还是觉得它在响应速度上稍显不足。今天,就让我们来重新认识一个被微软“雪藏”的系统——Windows 10 LTSC 2021官方精简版。 什么是Windows 10 LTSC? LTSC,全称为Long-Ter

香蕉梨:自然的甜蜜宝藏

&nbsp; &nbsp; &nbsp; &nbsp;在水果的缤纷世界里,有一种独特的存在,它融合了香蕉的软糯与梨子的清甜,那便是令人惊艳的香蕉梨。 &nbsp; &nbsp; &nbsp; &nbsp;食家巷香蕉梨,外形圆润可爱,色泽金黄中带着一抹清新的嫩绿,宛如大自然精心雕琢的艺术品。当你拿起一个香蕉梨,便能感受到它沉甸甸的分量,那是满满的果汁与营养在向你招手。 &nbsp; &nbs

宝藏!《自控入门班炼气题库》(玄武篇)1-9章:甄选部分

本文内容,全部选自联盟自动化考研联盟的:初试《自控入门班炼气题库》(玄武篇)。 目录 Part1:资料封面&目录 Part2:资料各个章节具体内容 第1章 自动控制的基本概念 第2章 控制系统的数学模型 第3章 控制系统的时域分析 第4章 根轨迹法 第5章 线性系统的频域分析法 第6章 线性系统的校正方法 第7章 线性离散系统的分析与设计 第8章 非线性控制系统的分析 第9

小火山 zzuli 1907 (宝藏)

小火山的宝藏收益    Description 进去宝藏后, 小火山发现宝藏有N个房间,且这n个房间通过N-1道门联通。 每一个房间都有一个价值为Ai的宝藏, 但是每一个房间也都存在一个机关。如果小火山取走了这个房间的宝藏,那么这个房间通往其他房间的门就永远打不开了,也就是说后面的宝藏小火山是得不到了(进入这个房间的门是不会关闭的,小火山还是可以回去的);如果小火山不取这个宝藏,而是去