蓝桥杯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 ...
随机推荐
- Mac部署spark2.4.4
环境信息 操作系统:macOS Mojave 10.14.6 JDK:1.8.0_211 (安装位置:/Library/Java/JavaVirtualMachines/jdk1.8.0_211.jd ...
- 龙芯3A4000-Debian 10上常用软件记录
所用平台 硬件:龙芯3a4000 (MIPS64el) 操作系统:Debian 10(buster)+ MATE桌面 内核版本:4.19.90 以下所有软件同样适用于x86体系结构的Linux发行版. ...
- 趣图:我说自己菜 vs 大佬说自己菜
扩展阅读 一大波趣图:CSS的力量 趣图:嫁人就嫁程序员,大妈都懂的! 趣图:向客户介绍的产品VS实际开发的产品 如何准备校招技术面试+一只小菜鸟的面试之路 向Spring大佬低头--大量源码流出 ...
- js实现表单验证
<!DOCTYPE html> <html> <head lang="en"> <meta charset="UTF-8&quo ...
- vulnhub靶机之Quaoar
Quaoar 靶机非常简单. 扫描端口主机. wordpress建站. 扫到两个用户,分别是wpuser以及admin. 爆破出了后台: 传了一个一句话木马,连上蚁剑又传了个反弹shell. 反弹sh ...
- 纹理_贴图_texture
详细代码可以在我的GitHub上找文末指定的项目.
- 【测试基础第六篇】bug定义及生命周期
bug定义 狭义:软件程序的漏洞或缺陷 广义:测试工程师或用户所发现和提出的软件可改进的细节(增强型.建议性)或需求文档存在差异的功能实现 职责:发现bug,提给开发,让其修改 bug类型--了解 代 ...
- 程序员的开源月刊:HelloGitHub(第 54 期)
兴趣是最好的老师,HelloGitHub 就是帮你找到兴趣! 简介 分享 GitHub 上有趣.入门级的开源项目. 这是一个面向编程新手.热爱编程.对开源社区感兴趣 人群的月刊,月刊的内容包括:各种编 ...
- vscode写latex的正反向搜索问题
vscode写latex的正反向搜索问题 vscode使用LaTeX Workshop + TexLive时可以很舒畅的写作 但是在长篇写作时,会涉及到正反向搜索的需求.即根据源码搜pdf的位置,和根 ...
- springboot集成swagger文档
//此处省略springboot创建过程 1.引入swagger相关依赖(2个依赖必须版本相同) <dependency> <groupId>io.springfox</ ...