题解

  正规解法是 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:七段码的更多相关文章

  1. 蓝桥杯2020.10.17B组c++

    1.门牌制作 暴力即可 #include <iostream> #include<math.h> #include<string.h> #include<st ...

  2. 2020第十一届蓝桥杯第二场省赛C++A组【A-H】

    A. 门牌制作 答案 624 代码 #include <bits/stdc++.h> using namespace std; int main() { ios::sync_with_st ...

  3. 2013第四届蓝桥杯决赛Java高职高专组题目以及解法答案

    2013第四届蓝桥杯决赛Java高职高专组题目以及解法答案 不知不觉离决赛都过去一个月了,一直忙于各种事情,都忘记整理一份试题.当作回忆也好. 1. 标题:好好学习 汤姆跟爷爷来中国旅游.一天,他帮助 ...

  4. 第四届蓝桥杯 c/c++真题

    第四届蓝桥杯 c/c++真题 <1>高斯日记 问题 大数学家高斯有个好习惯:无论如何都要记日记. 他的日记有个与众不同的地方,他从不注明年月日,而是用一个整数代替,比如:4210 后来人们 ...

  5. 第三届蓝桥杯 c/c++真题

    第三届蓝桥杯真题 c/c++ 以下题目我自己也并不是所有的题目都是一次性就能做对或是有结题思路的.有些题目也是经过查证网上相关的资料或是参考了别人的代码和解题思路才做出来的.总的来看,这份题目考了很多 ...

  6. 【蓝桥杯单片机02】LED的基本控制

    [蓝桥杯单片机02]LED的基本控制 广东职业技术学院  欧浩源 在CT107D单片机综合训练平台实现LED的基本控制和其他单片机开发平台不一样,不单单是控制几个LED实现跑马灯这么简单.因为在这个平 ...

  7. 蓝桥杯java历年真题及答案整理1~20.md

    蓝桥杯java历年真题及答案整理(闭关一个月,呕心沥血整理出来的) 1 算法是这样的,如果给定N个不同字符,将这N个字符全排列,最终的结果将会是N!种.如:给定 A.B.C三个不同的字符,则结果为:A ...

  8. 2018年第九届蓝桥杯题目(C/C++B组)汇总

    第一题 标题:第几天 2000年的1月1日,是那一年的第1天. 那么,2000年的5月4日,是那一年的第几天? 注意:需要提交的是一个整数,不要填写任何多余内容. 解题思路: 1.  判断2月有几天, ...

  9. 2017第八届蓝桥杯C/C++语言A组

    一:题目: 标题:迷宫 X星球的一处迷宫游乐场建在某个小山坡上.它是由10x10相互连通的小房间组成的. 房间的地板上写着一个很大的字母.我们假设玩家是面朝上坡的方向站立,则:L表示走到左边的房间,R ...

随机推荐

  1. 高可用集群之keepalived+lvs实战

    keepalived简介 lvs在我之前的博客<高负载集群实战之lvs负载均衡-技术流ken>中已经进行了详细的介绍和应用,在这里就不再赘述.这篇博文将把lvs与keepalived相结合 ...

  2. netty---sync,await

    LOG.info("*************************WINDOWS系统*********************************"); //设置事件处理 ...

  3. 转载:Win7系统 利用 pycharm导入Tensorflow失败,出现报错——ImportError:DLL load failed with error code -1073741795的解决方式

    转载自:https://blog.csdn.net/shen123me/article/details/80621103 下面的报错信息困扰了一天,网上的各种方法也都试过了,还是失败,最后自己瞎试,把 ...

  4. 新手C++ 练习项目--计算器

    本篇博客用于记录我自己用C++实现的一个计算器,目标是完成加减乘除带括号的四则运算,并在后期用工厂设计模式加以优化. Part 1:calculate 1+1=2 实现这样的一个式子的计算,只需要用到 ...

  5. 靠这些秋招秘笈,齐姐的学妹今年已经拿到了 8 个offer!

    小齐说: 现在秋招进行时,正在找工作的小伙伴进度都怎么样了呀? 今天这篇文章是我武大的学妹今年秋招的经验分享,庆妹去年才决定转行,现在已手握 N+ 个 offer - 这篇文章干货满满,庆妹对每一块面 ...

  6. 一种基于均值不等式的Listwise损失函数

    一种基于均值不等式的Listwise损失函数 1 前言 1.1 Learning to Rank 简介 Learning to Rank (LTR) , 也被叫做排序学习, 是搜索中的重要技术, 其目 ...

  7. 04 C语言基本语法

    C语言的令牌 C 语言的程序代码由各种令牌组成,令牌可以是关键字.标识符.常量.字符串值,或者是一个符号.例如,下方的C语句包括5个令牌: printf("Hello, World! \n& ...

  8. LCD1602 库函数

    LCD1602 库函数 This library allows an Arduino board to control LiquidCrystal displays (LCDs) based on t ...

  9. 设计完美windbg断点

    说到现场调试,断点是最重要的.通常,在生产环境中解决一个非常复杂的问题需要在本地.非生产环境中调试我自己的一台测试机器.我通常会调试有问题的进程或代码,以便更好地了解它是如何工作的,以及在我进入时需要 ...

  10. Python 中 pip 工具的安装与使用

    pip 是 Python 包管理工具,该工具提供了对Python 包的查找.下载.安装.卸载的功能. 目前如果你在 python.org 下载最新版本的安装包,则是已经自带了该工具. Python 2 ...