题目链接

题目

题目描述

集合 \(s\) 中有整数 \(1\) 到 \(n\) ,牛牛想从中挑几个整数组成一个新的集合。

现在牛妹给牛牛加了 \(m\) 个限制 ,每个限制包含两个整数 \(u\) 和 \(v\) ( \(u\neq v\)),且 \(u\) 和 \(v\) 不能同时出现在新集合中 。

请问牛牛能组成的新集合多少种。

可以选 0 个数。

返回一个整数,即新集合的种类数。

示例1

输入

3,2,[(1,2),(2,3)]

返回值

5

说明

当 n = 3 时,共有 8 个子集,当加上限制 (1, 2), (2, 3) 后,合法的自己有 \([], [1], [2], [3], [1, 3]\) 共 5 个

备注

第一个参数为 \(n\) 。第二个参数为 \(m\) 。第三个参数为 \(m\) 对 (u, v) 。\(1 < n \leq 20 \quad 1\leq m \leq 400\quad 1 \leq u, v\leq n\)

题解

知识点:DFS。

一道计数题,用dfs比较合适。

有两种枚举方式:

  1. dfs的第 \(i\) 层枚举集合中第 \(i\) 个放的数字,如果能放立刻加一,为了保证不重复,我们每次都放比上一次大的数。

  2. dfs第 \(i\) 层枚举第 \(i\) 个数字”放“和“不放“进集合,每次能放的时候选择放可以加一,选择不放则不加。

两者dfs的区别在于,前者每次都放一个新的数字,一定能确定一个新的状态,没有搜索节点是被浪费的;后者因为只有对某个数字选择”放“的时候才会确定一个新状态,而选择“不放”则继承上一层状态不能确定一个新的状态,需要枚举完 \(n\) 个数字才能遍历所有可能状态。显然,前者的复杂度更优秀。

时间复杂度 \(O(2^n)\)

空间复杂度 \(O(n + m)\)

代码

#include <bits/stdc++.h>

using namespace std;

struct Point {
int x, y;
}; int cnt;
bool vis[27];
void dfs(int n, vector<Point> &limit, int pos = 0) {
for (int i = pos + 1;i <= n;i++) {
bool ok = true;
for (int j = 0;j < limit.size();j++) {
if (limit[j].x == i && vis[limit[j].y]) ok &= false;
if (limit[j].y == i && vis[limit[j].x]) ok &= false;
}
if (ok) {
cnt++;
vis[i] = 1;
dfs(n, limit, i);
vis[i] = 0;
}
}
} int main() {
std::ios::sync_with_stdio(0), cin.tie(0), cout.tie(0);
int n, m;
cin >> n >> m;
vector<Point> limit;
for (int i = 0;i < m;i++) {
int u, v;
cin >> u >> v;
limit.push_back({ u,v });
}
dfs(n, limit);
cout << cnt + 1 << '\n';
return 0;
}

NC204418 新集合的更多相关文章

  1. Java新集合示意图

    Java的新集合实际上只有3个集合组件:①Map ②List ③Set 在Java 1.2后应该尽量避免使用Hashtable,Vector 和Stack: 假如在一个列表中部进行大量的插入和删除操作 ...

  2. [Google Guava]学习--新集合类型Multiset

    Guava提供了一个新集合类型Multiset,它可以多次添加相等的元素,且和元素顺序无关.Multiset继承于JDK的Cllection接口,而不是Set接口. Multiset主要方法介绍: a ...

  3. [Guava学习笔记]Collections: 不可变集合, 新集合类型

    我的技术博客经常被流氓网站恶意爬取转载.请移步原文:http://www.cnblogs.com/hamhog/p/3843386.html,享受整齐的排版.有效的链接.正确的代码缩进.更好的阅读体验 ...

  4. guava -- 新集合类型

    Guava引入了很多JDK没有的.但有用的新集合类型.这些新类型是为了和JDK集合框架共存,而没有往JDK集合抽象中硬塞其他概念. 作为一般规则,Guava集合非常精准地遵循了JDK接口契约. 1. ...

  5. Guava源码学习(四)新集合类型

    基于版本:Guava 22.0 Wiki:New collection types 0. 简介 Guava提供了很多好用的集合工具,比如Multiset和BiMap,本文介绍了这些新集合类型的使用方式 ...

  6. Guava集合--新集合类型

    Guava引入了很多JDK没有的.但我们发现明显有用的新集合类型.这些新类型是为了和JDK集合框架共存,而没有往JDK集合抽象中硬塞其他概念.作为一般规则,Guava集合非常精准地遵循了JDK接口契约 ...

  7. 牛客编程巅峰赛S1第11场 - 黄金&钻石 B.新集合 (DFS)

    题意:有\([1,n]\)这\(n\)个数,构造集合,集合中不能包含\(u\)和\(v\),问最多能构造多少个集合. 题解:被这题卡了一整场.....以为是推公式,结果答案是暴搜? ​ 首先我们先用一 ...

  8. Guava学习笔记:Guava新集合-Table等

    Table 当我们需要多个索引的数据结构的时候,通常情况下,我们只能用这种丑陋的Map<FirstName, Map<LastName, Person>>来实现.为此Guava ...

  9. Java新集合

    对我来说,集合类属于最强大的一种工具,特别适合在原创编程中使用.大家可能已感觉到我对Java 1.1 提供的集合多少有点儿失望.因此,看到Java 1.2 对集合重新引起了正确的注意后,确实令人非常愉 ...

  10. [Google Guava]学习--新集合类型BiMap

    BiMap提供了一种新的集合类型,它提供了key和value的双向关联的数据结构. Bimap 能非常方便的实现map<key,value>的转置要求,也就是value变为key,key变 ...

随机推荐

  1. [java] - 获取上传到服务器上的文件路径

    request.getSession().getServletContext().getRealPath("upload/" );

  2. SpringMVC03—RestFul和Controller

    控制器Controller 控制器复杂提供访问应用程序的行为,通常通过接口定义或注解定义两种方法实现. 控制器负责解析用户的请求并将其转换为一个模型. 在Spring MVC中一个控制器类可以包含多个 ...

  3. [转帖]如何监控Redis性能指标(译)

    Redis给人的印象是简单.很快,但是不代表它不需要关注它的性能指标,此文简单地介绍了一部分Redis性能指标.翻译过程中加入了自己延伸的一些疑问信息,仍然还有一些东西没有完全弄明白.原文中Metri ...

  4. [转帖]Oracle数据库开启NUMA支持

    NUMA简介 NUMA(Non Uniform Memory Access Architecture,非统一内存访问)把一台计算机分成多个节点(node),每个节点内部拥有多个CPU,节点内部使用共有 ...

  5. iftop的学习与使用

    iftop的学习与使用 背景 前段时间一直进行netperf 等网络性能验证工具的学习与使用. 监控很多时候采用了 node-exporter + prometheus + grafana来进行观察 ...

  6. [转帖]Jmeter学习笔记(十九)——后置处理器之正则表达式的使用

    https://www.cnblogs.com/pachongshangdexuebi/p/11733005.html 一.正则表达式提取器的作用 允许用户从服务器的响应中通过使用perl的正则表达式 ...

  7. [转帖]016 Linux 卧槽,看懂进程信息也不难嘛?top、ps

    016 Linux 卧槽,看懂进程信息也不难嘛?top.pshttps://my.oschina.net/u/3113381/blog/5455267 1 扒开看看 top 命令参数详情 Linux ...

  8. v-for动态添加表单,并且获取表单中的值

    vue是数据驱动视图,所以要想改变页面的结构,就要首先改变数据. 要想动态添加一个input表单,每当你点击的时候,添加一个数据在数组里面. handler(mess){ this.list.push ...

  9. 【VictoriaMetrics】一个小优化:循环改查表,性能提升56.48 倍

    作者:张富春(ahfuzhang),转载时请注明作者和引用链接,谢谢! cnblogs博客 zhihu Github 公众号:一本正经的瞎扯 做了一个 vm-storage 数据文件 merge 的工 ...

  10. 【JS 逆向百例】DOM事件断点调试,某商盟登录逆向

    声明 本文章中所有内容仅供学习交流,抓包内容.敏感网址.数据接口均已做脱敏处理,严禁用于商业用途和非法用途,否则由此产生的一切后果均与作者无关,若有侵权,请联系我立即删除! 逆向目标 目标:某商盟登录 ...