蓝桥杯2020 E:七段码

题解
正规解法是 dfs + 并查集,首先用 dfs 将其所有的情况枚举出来,再用并查集来判断是否在一个连通块上。
许多小伙伴计算的答案为76,主要是判断连通块这方面有问题,倘若不用并查集,直接枚举一条边是否和其余剩下的边相连,是就成立,不是就可以直接退出了,但是有一个问题是例如两个连通块的时候你上述的判断也是成立的,但是不处于同一个连通块中,所以不应该加上去。
1 #include <iostream>
2 #include <cstring>
3 using namespace std;
4
5 const int MAXN = 25;
6 int n = 7, ans = 0, path[MAXN], f[MAXN][MAXN], father[MAXN];
7
8 //查找 x 的祖先节点
9 int find(int x)
10 {
11 if (x != father[x]) { //路径压缩
12 return father[x] = find(father[x]);
13 }
14 return father[x];
15 }
16
17 void dfs(int u, int p, int m)
18 {
19 if (u == m) {
20 //初始化操作
21 for (int i = 1; i < MAXN; ++i) {
22 father[i] = i;
23 }
24 //集合合并
25 for (int i = 0; i < m; ++i) {
26 for (int j = i + 1; j < m; ++j) {
27 //存在边相连
28 if (f[path[i]][path[j]] == 1) {
29 //path[i] 和 path[j] 合并成一个集合
30 father[find(path[i])] = find(father[path[j]]);
31 }
32 }
33 }
34 //查找最终是否为一个集合
35 bool flag = false;
36 for (int i = 0; i < m - 1; ++i) {
37 if (find(path[i]) != find(path[i + 1])) {
38 flag = true;
39 break;
40 }
41 }
42
43 if (!flag) {
44 ++ans;
45 }
46 return ;
47 }
48 for (int i = p; i <= n; ++i) {
49 path[u] = i;
50 dfs(u + 1, i + 1, m);
51 }
52 }
53
54 int main()
55 {
56 memset(f, 0, sizeof(f));
57 f[1][2] = f[2][1] = 1;
58 f[1][6] = f[6][1] = 1;
59 f[2][7] = f[7][2] = 1;
60 f[6][7] = f[7][6] = 1;
61 f[7][3] = f[3][7] = 1;
62 f[7][5] = f[5][7] = 1;
63 f[2][3] = f[3][2] = 1;
64 f[3][4] = f[4][3] = 1;
65 f[4][5] = f[5][4] = 1;
66 f[5][6] = f[6][5] = 1;
67 for (int i = 1; i <= n; ++i) {
68 dfs(0, 1, i);
69 }
70 cout << ans << endl;
71 return 0;
72 }
但是当时还是没有做出来/(ㄒoㄒ)/~~哭鼻子。
蓝桥杯2020 E:七段码的更多相关文章
- 蓝桥杯2020.10.17B组c++
1.门牌制作 暴力即可 #include <iostream> #include<math.h> #include<string.h> #include<st ...
- 2020第十一届蓝桥杯第二场省赛C++A组【A-H】
A. 门牌制作 答案 624 代码 #include <bits/stdc++.h> using namespace std; int main() { ios::sync_with_st ...
- 2013第四届蓝桥杯决赛Java高职高专组题目以及解法答案
2013第四届蓝桥杯决赛Java高职高专组题目以及解法答案 不知不觉离决赛都过去一个月了,一直忙于各种事情,都忘记整理一份试题.当作回忆也好. 1. 标题:好好学习 汤姆跟爷爷来中国旅游.一天,他帮助 ...
- 第四届蓝桥杯 c/c++真题
第四届蓝桥杯 c/c++真题 <1>高斯日记 问题 大数学家高斯有个好习惯:无论如何都要记日记. 他的日记有个与众不同的地方,他从不注明年月日,而是用一个整数代替,比如:4210 后来人们 ...
- 第三届蓝桥杯 c/c++真题
第三届蓝桥杯真题 c/c++ 以下题目我自己也并不是所有的题目都是一次性就能做对或是有结题思路的.有些题目也是经过查证网上相关的资料或是参考了别人的代码和解题思路才做出来的.总的来看,这份题目考了很多 ...
- 【蓝桥杯单片机02】LED的基本控制
[蓝桥杯单片机02]LED的基本控制 广东职业技术学院 欧浩源 在CT107D单片机综合训练平台实现LED的基本控制和其他单片机开发平台不一样,不单单是控制几个LED实现跑马灯这么简单.因为在这个平 ...
- 蓝桥杯java历年真题及答案整理1~20.md
蓝桥杯java历年真题及答案整理(闭关一个月,呕心沥血整理出来的) 1 算法是这样的,如果给定N个不同字符,将这N个字符全排列,最终的结果将会是N!种.如:给定 A.B.C三个不同的字符,则结果为:A ...
- 2018年第九届蓝桥杯题目(C/C++B组)汇总
第一题 标题:第几天 2000年的1月1日,是那一年的第1天. 那么,2000年的5月4日,是那一年的第几天? 注意:需要提交的是一个整数,不要填写任何多余内容. 解题思路: 1. 判断2月有几天, ...
- 2017第八届蓝桥杯C/C++语言A组
一:题目: 标题:迷宫 X星球的一处迷宫游乐场建在某个小山坡上.它是由10x10相互连通的小房间组成的. 房间的地板上写着一个很大的字母.我们假设玩家是面朝上坡的方向站立,则:L表示走到左边的房间,R ...
随机推荐
- hystrix讲解:熔断降级隔离以及合并请求
对springcloud只是学习了基本的框架搭建,基本上看到的例子都是只使用了fallback 但是hystrix还有线程隔离和请求合并的能力 顺便吐槽 大部分人的博客例子估计都是听课的 应用 ...
- MyBatis常用实现方式
MyBatis 是一个优秀的基于 java 的持久层框架,它内部封装了 jdbc,使开发者只需要关注 sql 语句本身,而不需要花费精力去处理加载驱动.创建连接.创建 statement 等繁杂的过程 ...
- Docker应用安装
一.安装mysql 1.查看可用的 MySQL 版本 访问 MySQL 镜像库地址:https://hub.docker.com/_/mysql?tab=tags . 可以通过 Sort by 查看其 ...
- manacher(马拉车算法)
Manacher(马拉车算法) 序言 mannacher 是一种在 O(n)时间内求出最长回文串的算法 我们用暴力求解最长回文串长度的时间复杂度为O(n3) 很明显,这个时间复杂度我们接受不了,这时候 ...
- 【转】Locust性能-零基础入门系列(2) -重写wait_time
在虚拟模拟的时候,可能对等待时间有更高的要求,比如假如有这么一个场景要求:某任务要求每被执行1次,那么下次的等待时间就1秒钟.这种情况,是可以实现的,这也就体现了Locust的灵活性.可编程性,很多比 ...
- 关于浏览器访问iLO报错ERR_SSL_BAD_RECORD_MAC_ALERT
公司有几台HP DL380 G7服务器,ilo版本是ilo3(Integrated Lights-Out 3),ilo口配置好后,无法正常打开ilo页面 ping ilo口是通的,并且telnet 8 ...
- Book of Shaders 01 - 关于函数造型能力的理解
0x00 从函数出发 Shader 中的很多效果都是由函数计算得出的,如何更好地理解二者的关系呢.不妨先看看函数是什么?函数的定义可以简单地描述为:给定一个集合 A,对于其中的元素施加法则 f,则可以 ...
- java 线程池、多线程实战(生产者消费者模型,1 vs 10) 附案例源码
导读 前二天写了一篇<Java 多线程并发编程>点我直达,放国庆,在家闲着没事,继续写剩下的东西,开干! 线程池 为什么要使用线程池 例如web服务器.数据库服务器.文件服务器或邮件服务器 ...
- 04 sublime text 3在线安装package control插件,之后安装主题插件和ConvertToUTF8 插件
前提:需要@@科学@@上网 在线安装包通常都需要@@科学@@上网 安装package control插件 在线安装package control插件 按ctrl+shift+p 输入install,选 ...
- 别人写的很好Arduino教材
原文来自:https://www.arduino.cn/thread-31720-1-1.html 上一篇:Arduino教程--通过 库管理器 添加库 http://www.arduino.cn/t ...