codeforces CF986C AND Graph 建圖 dfs

$ \rightarrow $ 戳我進CF原題

C. AND Graph

time limit per test: 4 seconds
memory limit per test: 256 megabytes
input: standard input
output: standard output

 
You are given a set of size $ m $ with integer elements between $ 0 $ and $ 2^n-1 $ inclusive.
Let's build an undirected graph on these integers in the following way:
connect two integers $ x $ and $ y $ with an edge if and only if $ x $ & $ y=0 $ .
Here & is the bitwise AND operation. Count the number of connected components in that graph.
 

Input

In the first line of input there are two integers $ n $ and $ m ( 0 \le n \le 22, 1 \le m \le 2^n ) $ ,
 
In the second line there are $ m $ integers $ a_1,a_2, \dots ,a_m ( 0 \le a_i \le 2^n ) $ — the elements of the set.
All $ a_i $ are distinct.
 

Output

Print the number of connected components.

 

Examples

input1

 2 31 2 3

output1

2

input2

 5 55 19 10 20 12

output2

2

 

Note

Graph from first sample:

pic

Graph from second sample:

pic

 

題目大意

  • 給定 $ m $ 個 $ 0 ~ 2^n-1 $ 之間的整數,每個整數代表一個點

  • 兩個整數 $ x,y $ 之間有無向邊當且僅當 $ x $ & $ y=0 $ ,求無向圖有多少個連通塊

  • $ n \le 22 $

 

題解

  • 把 $ 0 ~ 2^n-1 $ 之間的每個點拆成 $ x $ 和 $ x' $ 兩個點

  • $ 1. $ 從 $ x $ 到 $ (~x)' $ 連有向邊

  • $ 2. $ 從 $ x' $ 到 $ (x \quad xor \quad (1 \ll k ))' $ 連有向邊 $ (o \le k < n ) $

  • $ 3. $ 若 $ x $ 屬於給定的 $ m $ 個數,則從 $ x' $ 到 $ x $ 連有向邊

  • 從 $ m $ 個數出發進行遍歷,求連通塊數

 

代碼

#include<iostream>
#include<cstring>
#include<cstdio>
#include<algorithm>
using namespace std;
#define maxn (1<<23)+5
int n,m,ans,tot;
bool vis[maxn],mark[maxn];
void dfs(int u){if(vis[u]) return; vis[u]=1;if(u<(1<<n)) dfs(u+(1<<n));else {tot=(1<<(n+1))-1-u;if(!vis[tot]&&mark[tot]) dfs(tot);for(int i=0;i<n;++i) if(!vis[u|(1<<i)]) dfs(u|(1<<i));}
}
int main(){scanf("%d %d",&n,&m);for(int x,i=1;i<=m;++i){ scanf("%d",&x); mark[x]=1; }for(int i=0;i<(1<<n);++i) if(mark[i]&&!vis[i]){ ++ans; dfs(i); }printf("%d",ans);return 0;
}
/*
#        40059473
When     2018-07-07 14:30:49
Who      PotremZ
Problem  C - AND Graph
Lang     GNU C++
Verdict  Accepted
Time     764 ms
Memory   91100 KB
*/

转载于:https://www.cnblogs.com/PotremZ/p/9600617.html

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/570464.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

HackRF 无线门铃信号录制与重放

本文内容、开发板及配件仅限用于学校或科研院所开展科研实验! 淘宝店铺名称&#xff1a;开源SDR实验室 HackRF链接&#xff1a;https://item.taobao.com/item.htm?spma1z10.1-c.w4004-13257850194.8.69503d888aIzVL&id526187854860 无线门铃链接&#xff1a;https://item.…

springboot项目和云服务器,以及域名的申请和使用(后续持续更新)

来记录一下做一个springboot项目以及上传至云服务器上过程新建并发布项目注册域名&#xff1a;域名备案发现的问题&#xff1a;在阿里云上面搞了一台个人服务器&#xff0c;当时是双十一打折买的&#xff0c;229好像。有了服务器当然要干点什么&#xff0c;于是做了个springboo…

抢火车票软件的教程

抢火车票软件的教程 1. 先去GitHub上下载源文件testerSunshine。 2. 下载并安装python3.7.4。&#xff08;安装完成在cmd中输入 Python -V,如果出现是的是Python3.7.4&#xff0c;就说明安装成功&#xff09; 3. 控制cmd进入下载的源码的文件夹下&#xff0c;输入 pip3 instal…

使用大麦网抢票工具的一些心得体会

源码上传已到百度网盘了 详情参考的是大麦抢票工具GitHub 【 重要&#xff0c;用前必看&#xff01;&#xff01;&#xff01;】 浏览器准备步骤&#xff08;根据自己浏览器的版本来下载对应的driver驱动&#xff09; &#xff08;这个准备工作一定要做&#xff09; 我来解…

[中山市选]杀人游戏 (Tarjan缩点)

题目链接 Solution 可以考虑到如果知道环内一点的身份,如果凶手在其中就查出来了,同时不会有危险. 那么对警察造成威胁的就是那些身份不明且不能从其他点转移过来的点. 那么大部答案就是缩完点之后入度为 \(0\) 的联通块数量. 但是,会有特殊情况: 如图,我们就只要查 \(2\) 或者…

数据库为date型,而前端要显示String型,问题解决

关于数据库字段类型与前端显示类型不符问题解决&#xff1a;最近遇到这样的一个问题&#xff0c;有一个字段在数据库是date型的&#xff0c;但是产品需求我们在前端这样显示&#xff0c;如下图&#xff1b; 先把时间显示出来&#xff0c;最后一行显示上面所有记录的汇总。 而这…

codeforces 1039B Subway Pursuit【二分+随机】

题目&#xff1a;戳这里 题意&#xff1a;一个点在[1,n]以内&#xff0c;我们可以进行4500次查询&#xff0c;每次查询之后&#xff0c;该点会向左或向右移动0~k步&#xff0c;请在4500次查询以内找到该点。 解题思路&#xff1a;一边二分&#xff0c;一边随机。 交互题似乎有好…

kbmmw中向服务器端传递对象的一种简单方式

运行环境&#xff1a;delphi 10.2kbmmw 5.6.20 在kbmmw 的老版本中&#xff0c;要向服务器传送一个本地的对象&#xff0c;一般都需要进行一些转换&#xff0c;例如通过序列化的方式。 在新版的kbmmw中这一切都变的很简单&#xff0c;使用use... 方法就可以了&#xff0c;非常的…

给自己的网址加上https,添加ssl证书(springboot项目)

给自己的网址加上https,添加ssl证书1.先去阿里云官网首页&#xff0c;登录&#xff0c;找到 *SSL证书*2.点击 *立即购买*3.选择好点击确定就可以4.输入自己的域名和手机号&#xff0c;等待即可&#xff0c;成功他就叫给你发邮件5.通知你通过以后就进入SSL控制台&#xff0c;点击…

c++命名空间---namespace

C 命名空间 C 应用程序中。例如&#xff0c;您可能会写一个名为 func() 的函数&#xff0c;在另一个可用的库中也存在一个相同的函数 func()。这样&#xff0c;编译器就无法判断您所使用的是哪一个 func() 函数。 因此&#xff0c;引入了命名空间这个概念&#xff0c;专门用于解…

基于深度学习的中文语音识别系统框架(pluse)

目录 声学模型GRU-CTCDFCNNDFSMN语言模型n-gramCBHG数据集本文搭建一个完整的中文语音识别系统&#xff0c;包括声学模型和语言模型&#xff0c;能够将输入的音频信号识别为汉字。 声学模型使用了应用较为广泛的递归循环网络中的GRU-CTC的组合&#xff0c;除此之外还引入了科大…

jSignature签名的用法,一文教会你(一)前端代码

jSignature签名的用法1、先看看效果以后最后它是什么格式的2、先去下载该js3、下载以后就把它引入我们的HTML中4、看一下我的例子吧&#xff01;下期我们在讲&#xff0c;怎么把base64在后台处理&#xff0c;然后在存进我们指定的位置&#xff0c;以及怎么存数据库&#xff1b;…

jSignature签名的用法,一文教会你(二)后台代码

1、先在我们的项目里加几个工具类&#xff0c;代码如下 AbstractUploadAction &#xff08;名字可以自取&#xff0c;这个不影响&#xff09; import java.io.File; import java.io.FileInputStream; import java.io.InputStream; import java.io.OutputStream;import javax.s…

HTML5 多图片上传(前端+后台详解)

HTML5 多图片上传&#xff08;前端后台详解&#xff09;1、参考jquery插件库2、修改代码3、添加的后台代码4、删除的后台代码1、参考jquery插件库 手机端实现多图片上传 2、修改代码 我发现他这里的代码仅仅只是显示出来了&#xff0c;对后台一点作用都没有&#xff0c;于是…

vue2.0移动端自定义性别选择提示框

这篇文章主要是简单的实现了vue2.0移动端自定义性别选择的功能&#xff0c;很简单但是经常用到&#xff0c;于是写了一个小小的demo&#xff0c;记录下来。 效果图&#xff1a; 图片.png实现代码&#xff1a; <template><div class"app"><div class&q…

微信小程序入门的一些建议,替大家踩坑

小程序入门教程1&#xff0c; 建议先去看官方文档2&#xff0c;说说app.json这个文件3、app.js4、点击事件5、跳转页面最后要说一下我踩的一个大坑&#xff0c;样式问题1&#xff0c; 建议先去看官方文档 微信小程序官方文档 官方文档里有下载微信开发者工具的地址&#xff0c…

云服务器Linux安装,配置,使用nginx

云服务器Linux安装&#xff0c;配置&#xff0c;使用nginxlinux安装nginxnginx的使用linux安装nginx 检查是否安装了GCC&#xff08;可在任何目录下输入&#xff09; yum list installed | grep "gcc"如果像下图一样&#xff0c;就说明安装了&#xff0c;反之没安装…

原来文化设计可以这样玩!

设计是什么&#xff1f;设计是一种以科学的方法去高效解决问题的办法&#xff0c;为之设计。例如一个灯&#xff0c;是为了照明&#xff0c;如果改良的灯&#xff0c;肯定是为了高效或者节能地解决照明这个需求&#xff0c;没毛病吧&#xff1f; 那么中秋的花灯是什么&#xff…

Windows安装python,以及python的集成开发环境Pycharm

安装python&#xff0c;以及python的集成开发环境Pycharm1&#xff0c;安装python&#xff08;Windows&#xff09;2&#xff0c;安装python的集成开发环境1&#xff0c;安装python&#xff08;Windows&#xff09; 进入python官网 点击图中标识出来的这个&#xff0c;是个ex…

Python 最难的问题

Python 最难的问题 超过十年以上&#xff0c;没有比解释器全局锁&#xff08;GIL&#xff09;让Python新手和专家更有挫折感或者更有好奇心。 未解决的问题 随处都是问题。难度大、耗时多肯定是其中一个问题。仅仅是尝试解决这个问题就会让人惊讶。之前是整个社区的尝试&#x…