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…

The Two Routes CodeForces - 601A(水最短路)

一个完全图 1和n肯定有一条路 不是公路就是铁路 另 另一个跑遍最短路即可 #include <bits/stdc.h> #define mem(a, b) memset(a, b, sizeof(a)) using namespace std; const int maxn 100100, INF 0x7fffffff; int head[maxn], cnt, n, m; int vis[maxn], d[maxn]; b…

hadoop启动

安装完hadoop集群之后&#xff0c;第一次启动之前必须初始化&#xff0c;之后就可以不用再初始化&#xff08;注意&#xff1a;初始化操作只可以一次&#xff09; hdfs namenode -format (hadoop namenode -format) 一键启动 start-all.sh 一键关闭 stop-all.sh node001启动…

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

源码上传已到百度网盘了 详情参考的是大麦抢票工具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;一边随机。 交互题似乎有好…

sql截取指定长度

select *,SUBSTRING(sum_day,1,4) as sum_day from report_waste_sum_years SUBSTRING 用法SUBSTRING&#xff08;这个为想截取的字段&#xff0c;这个是从哪个开始&#xff0c;从哪个停止&#xff09; 从1开始&#xff0c;如我这1,4&#xff0c;最后截取的是这个字段的前4&…

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;点击…

转载几个和职业建议相关的文章

不要自称为程序员http://www.ruanyifeng.com/blog/2011/10/dont_call_yourself_a_programmer.html 面试时&#xff0c;如何向公司提问&#xff1f;http://www.ruanyifeng.com/blog/2012/08/questions_you_need_to_ask_in_an_interview.html 七个对我最好的职业建议&#xff08;…

将多选框中的值,用String接收,并用‘,’隔开,到后台去循环这个数据

//首先通过CheckBox的名字去找到所有的CheckBox&#xff0c; var obj document.getElementsByName("checkbox1"); var check_val ""; //再来循环obj&#xff0c;把obj中的值全部放进check_val中&#xff0c;并用,隔开 for (var i 0; i < obj.length;…

Manacher【p1210】回文检测

题目描述--->P1210 回文检测 分析: 看到回文显然想到了manacher算法(线性求解回文串问题 如果不了解还是去敲一下板子,学习一下比较好.-->manacher 题目要求我们求出只包含字母的回文串的长度. 如果你会manacher,这很简单. 只需要在输入之后处理一下我们得到的串即可. 这…

怎么通过路径藏值,然后通过js,jq获取页面路径带过来的值

我们在转跳页面的时候经常会通过页面路径藏一下我们需要的值 url: ../ms/startCheck.html?projectIdprojectId&institutionsIdinstitutionsId, //这个是我转跳的路径&#xff0c;上面的projectId和institutionsId都是已经赋值了的//比如这个是我们的页面路径 http://127.…

SimpleDateFormat的一些简单用法:时间类型转字符串,字符串转时间

我们在编程过程中经常会用到SimpleDateFormat这个类&#xff0c;这里记录一下这个SimpleDateFormat的简单用法。 //这个是我们常见的&#xff0c;这个转格式主要是看后面括号里写的是什么样的格式 SimpleDateFormat formater new SimpleDateFormat("yyyy-MM-dd HH:mm:ss…

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;…