蓝桥杯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 ...
随机推荐
- EAM在不同行业的应用
EAM在不同行业的应用 EAM从出现至今,已让很多资产密集型企业受益,甚至在一些行业领域里已经是公认的.不可或缺的管理方案,比如电力行业.轨道交通行业等.但由于不同行业或者企业业务类型不同,导致了资产 ...
- v-if和v-show的区别与使用
1.共同点: v-if 和 v-show 都能实现元素的显示隐藏. 2.不同点: v-if显示隐藏是将dom元素整个添加或删除,v-show元素隐藏时,会在dom节点中把该元素设置css属性为disp ...
- Java操作Elasticsearch 之 [Java High Level REST Clientedit]
1. 简述 Elasticsearch 是基于 Lucene 开发的一个分布式全文检索框架,向 Elasticsearch 中存储和从 Elasticsearch 中查询,格式是json. 向 Ela ...
- Cypress系列(60)- 运行时的截图和录屏
如果想从头学起Cypress,可以看下面的系列文章哦 https://www.cnblogs.com/poloyy/category/1768839.html 背景 在测试运行时截图和录屏能够在测试错 ...
- (转载)什么是B+树?
本文转载自网络. 如有侵权,请联系处理!
- 008 01 Android 零基础入门 01 Java基础语法 02 Java常量与变量 02 Java 中的关键字
008 01 Android 零基础入门 01 Java基础语法 02 Java常量与变量 02 Java 中的关键字 关键字 关键字就是一些有特殊意义的词 之前学习的程序中涉及到的关键字 Java中 ...
- Java知识系统回顾整理01基础05控制流程02 switch
一.switch switch 语句相当于 if else的另一种表达方式 switch可以使用byte,short,int,char,String,enum 注: 每个表达式结束,都应该有一个bre ...
- 【题解】CF1290B Irreducible Anagrams
Link 题目大意:对于一个字符串,每次询问一个区间,看看这个区间是不是可以划分为若干区间,这些区间内数字经过排列后可以还原原来区间. \(\text{Solution:}\) 菜鸡笔者字符串构造该好 ...
- 可能是东半球第二好用的软件工具全部在这里(update in 2020.10.09)
1. 产品经理工具种草 浏览器:Google Chrome 网络浏览器 原型绘制软件:墨刀- 在线产品原型设计与协作平台(https://modao.cc/).摹客mockplus - 摹客,让设计和 ...
- 设备通讯——RS232
RS232的接口有两种--一种公头.一种母头,两种头的引脚是有区别的 MAX232电路图: 注意:串口通讯需要交叉接线.