七段码(建图+搜索+并查集)

2023-11-20

在这里插入图片描述

思路:
step1:邻接表建图,相邻为1,不相邻为0,题目就等价为在图中求连通子图的个数。
step2:深度搜索每条边,并存储下来。
step3:对选择的边用并查集保存下来,然后看father[i] == i的个数,等于1,表示连通,否则表示不连通。

易错点:
1:建图时别忘了[5][6] 和[2][3] 也是相邻的
2:dfs如果需要存储搜索的结果,用一个数组的0和1来保存就行
3:选子序列的dfs代码为:

	flag[i] = 1;
	dfs(i + 1);
	flag[i] = 0;
	dfs(i + 1); 
4:并查集的使用

在这里插入图片描述

#include <bits/stdc++.h>
using namespace std;

void creat();
void dfs(int i);
int find(int i); //查找并查集中的根 
int mp[8][8]; //图 
int flag[8]; //标志,1表示该灯亮 
int father[8];
int result = 0;


int main(){
	
//	//建图
	creat();
//	//深搜 
	dfs(1);
	cout << result << endl;
	return 0;
}
void creat(){
	for (int i = 1; i < 8; ++i){
		for (int j = 1; j < 8; ++j){
			mp[i][j] = 0;
		}
	}
	mp[1][2] = mp[1][6] = 1;
	mp[2][1] = mp[2][7] = mp[2][3] = 1;
	mp[3][4] = mp[3][7] = mp[3][2] = 1;
	mp[4][3] = mp[4][5] = 1;
	mp[5][4] = mp[5][7] = mp[5][6] = 1;
	mp[6][1] = mp[6][7] = mp[6][5] = 1;
	mp[7][2] = mp[7][3] = mp[7][5] = mp[7][6] = 1;
	
}
void dfs(int i){
	
	if (i == 8){
		for (int m = 1; m <= 7; ++m){   //初始值要注意,都是i,而不是0!!! 
			father[m] = m;
		}
		for (int i = 1; i <= 7; ++i){ //构造并查集 
			for (int j = 1; j <= 7; ++j){
				if (mp[i][j] && flag[i] && flag[j]){
					//两个集合的合并,操作的是根的下标!!!
					int x = find(i);
					int y = find(j);
					if (x != y) {
						father[x] = y;
					} 
				}
			}
		}
		int cnt = 0; //根的个数 
		for (int i = 1; i<= 7; ++i){
			if (flag[i] && father[i] == i) cnt++; //应该是father,而不是find()!!! 
		}
		if (cnt == 1) result++;
		return ;
	}
	
	flag[i] = 1;
	dfs(i + 1);
	flag[i] = 0;
	dfs(i + 1); //这一句不能少,这种情况为该灯熄灭的情况!!! 
}
int find(int i){
	if(father[i] == i) return i;
	return find(father[i]); 
}

//答案是80

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

七段码(建图+搜索+并查集) 的相关文章

  • 蓝桥杯跑步锻炼

    问题描述 小蓝每天都锻炼身体 正常情况下 小蓝每天跑 1 千米 如果某天是周一或者月初 1 日 为了 激励自己 小蓝要跑 2 千米 如果同时是周一或月初 小蓝也是跑 2 千米 小蓝跑步已经坚持了很长时间 从 2000 年 1 月 1 日周六
  • C语言 在数组中找到和值为目标值的两个元素

    输入你的目标值target 就能找到相加为target的两个数了 自己输入一个数组 并且设定一个目标值 target 就能在数组中找到两个相加等于target的元素了 include
  • 一种关于单片机定时器中断和数码管冲突问题的解决方案

    问题发现 我们会发现 同时存在定时器中断和数码管操作时 有时会导致数码管显示异常 原因探究 在定时器中断函数中不要操作P2和P0 因为定时器 T 和主板 M 的时钟频率不一样 有可能导致M刚操作完P2 T又去操作P0 导致正确的P2和P0没
  • 备战2023蓝桥国赛-传纸条

    题目描述 解析 这道题想了我好久 一开始我是想假如只走一条路线 从 1 1 走到 m n 这种问题该怎么解决呢 针对这种问题我是设了dp k i j 表示走了k步到达 i j 的好心程度之和的最大值 然后根据这个来写出转移方程来计算 后面就
  • 洛谷-【入门4】数组

    1 小鱼比可爱 题目描述 人比人 气死人 鱼比鱼 难死鱼 小鱼最近参加了一个 比可爱 比赛 比的是每只鱼的可爱程度 参赛的鱼被从左到右排成一排 头都朝向左边 然后每只鱼会得到一个整数数值 表示这只鱼的可爱程度 很显然整数越大 表示这只鱼越可
  • 通过int 关系运算符来 比较两个 float 变量的大小

    include
  • 第五届蓝桥杯—— 基础练习:数列特征

    问题描述 给出n个数 找出这n个数的最大值 最小值 和 输入格式 第一行为整数n 表示数的个数 第二行有n个数 为给定的n个数 每个数的绝对值都小于10000 输出格式 输出三行 每行一个整数 第一行表示这些数中的最大值 第二行表示这些数中
  • 蓝桥杯---貌似化学---逆矩阵

    试题 算法训练 貌似化学 资源限制 时间限制 1 0s 内存限制 256 0MB 问题描述 现在有a b c三种原料 如果他们按x y z混合 就能产生一种神奇的物品d 当然不一定只产生一份d 但a b c的最简比一定是x y z 现在给你
  • 蓝桥杯单片机组——程序框架及客观题

    文章目录 前言 程序框架 main 中断 两段式代码结构 单片机运行流程 代码风格 客观题 总结 目录 前言 前面两篇主要是介绍了蓝桥省赛的一些参赛技巧 此篇主要是分享程序框架和一些客观题的链接 程序框架 蓝桥的评分是综合了效果和代码步骤的
  • 【Java】用do-while循环,实现猜数字。

    package TcmStudy day05 import java util Scanner public class DoWhileText01 public static void main String args Scanner i
  • C语言实现顺序表

    线性表是数据结构中的逻辑结构 线性表采用顺序存储的方式存储就称之为顺序表 数组是顺序表在实际编程中的具体实现方式之一 本篇主要介绍顺序表 顺序表的创建 添加元素 删除元素 遍历输出等操作 1 创建顺序表 1 1定义顺序表结构体 结构体包含三
  • JAVA中的JeeSite框架基本简介

    JAVA的主流框架是很多的 每一个框架都有它的适用项目和条件 所有JAVA程序员都熟悉的肯定是常用的四大框架 而JeeSite这个框架使用的人却不是很多 但是这个框架却有它的独到之处 稳定 高效 调用方便 这里对JeeSite做一个简单的介
  • c1048: [编程入门]自定义函数之字符串拷贝

    题目描述 有一字符串 包含n个字符 写一函数 将此字符串中从第m个字符开始的全部字符复制成为另一个字符串 输入 数字n 一行字符串 数字m 输出 从m开始的子串 样例输入复制 6 abcdef 3 样例输出复制 cdef 思路 两种方法 一
  • 蓝桥杯单片机第14届省赛客观题目+程序题目+程序题参考答案

    目录 客观题题目 程序题题目 程序题参考答案 main h main c Init h Init c SMG h SMG c DSQ h DSQ c YanShi h YanShi c JZKey h JZKey c ds1302 h ds
  • 2018年第九届蓝桥杯C/C++A组省赛 题面&部分题解

    首先 原题 链接 https pan baidu com s 1UzRN6Mf2Dwp0263F MMESg 密码 2ryh 第一题 标题 分数 1 1 1 2 1 4 1 8 1 16 每项是前一项的一半 如果一共有20项 求这个和是多少
  • 蓝桥杯C/C++百校真题赛(3期)Day3(考勤刷卡、最大和)

    Day3 Q1 考勤刷卡 Q2 最大和 Q1 考勤刷卡 问题描述 小蓝负责一个公司的考勤系统 他每天都需要根据员工刷卡的情况来确定 每个员工是否到岗 当员工刷卡时 会在后台留下一条记录 包括刷卡的时间和员工编号 只 要在一天中员工刷过一次卡
  • 三个小朋友分糖果

    题目描述 有甲 乙 丙三个小朋友 甲有x粒糖果 乙有y粒糖果 丙有z粒糖果 现在他们做一个游戏 从甲开始 将自己的糖平均分三份 自己留一份 其余两份分别给乙与丙 多余的糖果自己吃掉 然后乙与丙也依次这样做 问最后甲 乙 丙三人各有多少粒糖果
  • 剑指Offer 12—矩阵中的路径

    题目描述 给定一个 m x n 二维字符网格 board 和一个字符串单词 word 如果 word 存在于网格中 返回 true 否则 返回 false 单词必须按照字母顺序 通过相邻的单元格内的字母构成 其中 相邻 单元格是那些水平相邻
  • 1141 二维数组的输入和输出

    题目描述 输入m行n列的二维数组的值 再按行列形式输出 输入要求 第一行输入m n代表行数和列数 接着输入具体的m n个元素 输出要求 按行列形式换行输出 每一个数据后面都有空格 一行输出完毕后换行 输入样例 2 5 1 4 6 23 1
  • 蓝桥杯 填字母游戏(博弈论)

    小明经常玩 LOL 游戏上瘾 一次他想挑战K大师 不料K大师说 我们先来玩个空格填字母的游戏 要是你不能赢我 就再别玩LOL了 K大师在纸上画了一行n个格子 要小明和他交替往其中填入字母 并且 1 轮到某人填的时候 只能在某个空格中填入L或

随机推荐

  • 把思科端口速率改为不协商_端口汇聚—TRUNK技术介绍

    一 概述 随着网络技术的不断发展和应用 网络的速度越来越快 网络的应用也越来越复杂 因此在很多实际应用中网络速度就成为各种网络应用的瓶颈所在 通过升级来提高网络速度是解决问题的一个有效的手段 比如从10M以太网到100M以太网以至于1000
  • Tic-Tac-Toe(三子连)(总结规律)

    Time Limit 1000 mSec Memory Limit 262144 KB Problem Description Kim likes to play Tic Tac Toe Given a current state and
  • 基于灰度的模板匹配(带旋转角度)

    原图 选择模板 旋转180度进行识别 继续旋转 依然可以识别 代码 Searching the best matching of a template in an image with rotation dev close window r
  • STM32使用各传感器demo

    先挖个坑 待整理 语音播报部分 1 VS1053语音模块 2 JQ8400语音模块 智能小车部分 3 寻迹模块 4 避障模块 5 舵机驱动 6 超声波模块 7 L298N模块 8 蓝牙JD31模块 兼容HC 05 9 红外模块 10 MPU
  • 使用golang+antlr4构建一个自己的语言解析器(一)

    Antlr4 简介 ANTLR 全名 ANother Tool for Language Recognition 是基于LL 算法实现的语法解析器生成器 parser generator 用Java语言编写 使用自上而下 top down
  • 如何查看Tomcat版本信息

    一 简单暴力的 1 打开tomcat路径下的lib文件夹 找到catalina jar 用解压工具打开 找到 MANIFEST MF 打开就可以看到了 二 进入tomcat 安装路径 进入bin文件夹 对于version bat点击运行后会
  • STM32野火教程学习

    野火教程学习 全套200集视频教程和1000页PDF教程请到秉火论坛下载 www firebbs cn 野火视频教程优酷观看网址 http i youku com firege 第4章 初识STM32 零死角玩转STM32 F429系列 h
  • LaTeX 命令和代码结构简介

    目录 LaTeX LaTeX LATE X 命令和环境 命令 参数 环境 分组 LaTeX LaTeX
  • 【Linux应用】磁盘IO读写测试工具-FIO详解

    1 FIO简介 FIO是Linux下开源的一款IOPS测试工具 主要用来对磁盘进行压力测试和性能验证 它可以产生许多线程或进程来执行用户特定类型的I O操作 通过编写作业文件 类似于k8s的yaml 或者直接命令去执行测试动作 相当于是一个
  • linux 使用systemctl 启动服务报错: Error: No space left on device

    By default Linux only allocates 8192 watches for inotify which is ridiculously low And when it runs out the error is als
  • uni-app开发微信小程序数据 \n 换行符失效问题

    前言 使用uni app开发微信小程序时 使用text显示字符串 字符串带 n 需要在 n处直接换行 1 本地字符串 可以直接换行显示 2 后台返回字符串 直接换行失效 原因 渲染时 n 直接被当成字符串处理了 根本不识别 效果图 实现 1
  • pikachu靶场 RCE、File Inclusion

    目录 exec ping exec eval File Inclusion local File Inclusion remote exec ping 输入正常的ip地址看到正常回显 测试带管道符 能不能正常执行 发现可以 命令可以接各种命
  • C++中经常有set和get函数,那么他们有什么作用呢

    C 中经常有set和get函数 set和get函数的作用 由于成员变量我们一般设置为私有 在类外部不能直接访问 所以我们需要设计公有的set 函数和get 函数来访问它 set 函数是指修改私有成员变量的值的那类函数 get 函数是指输出
  • vue中用高德地图根据经纬度在地图上显示一个定位点

    在 Vue 中使用高德地图显示定位点 你需要做以下几件事 在项目中安装高德地图的 npm 包 npminstall save amap js api 在 main js 中引入高德地图的库并初始化 import AMapfrom amap
  • JSP——JavaBean的使用实例(求圆的面积)

    JSP页面通过表单输入圆半径并提交给该页面 表单提交后 JSP页面将计算圆面积和周长的任务交给一个JavaBean去完成 1 建立如下目录结构文件 2 Circle java 文件 package sun hebtu 求圆面积的Circle
  • JSP+ssm计算机毕业设计米哈游原神角色伤害计算系统xbn3e【源码、数据库、LW、部署】

    项目运行 项目含有源码 文档 程序 数据库 配套开发软件 软件安装教程 环境配置 Jdk1 8 Tomcat7 0 Mysql HBuilderX Webstorm也行 Eclispe IntelliJ IDEA Eclispe MyEcl
  • ROS2报错 AttributeError: type object ‘type‘ has no attribute ‘_TYPE_SUPPORT‘

    问题描述 今天在用python写ROS2编写发布者和订阅者 然后需要用到自己的写的接口 在写完之后 使用colcon build并没有报错 并且可以使用ros2 interface show my interface指令查看到自己定义的接口
  • 用 IDEA+EmmyLua 来写神途脚本

    1 安装IntelliJ IDEA 下载地址 Download IntelliJ IDEA The Capable Ergonomic Java IDE by JetBrains 推荐安装 2022 1 4 版本 可使用社区版 2 安装 l
  • QT二维码生成和解析&Demo

    目录 一 前言 二 相关知识 三 效果展示 四 主要源码简析 五 源码Demo 一 前言 本文主要介绍二维码生成和解析的相关知识和例程 二 相关知识 二维码生成 主要用到的是开源的二维码QR码编码库qrencode 需要使用到的库文件为下面
  • 七段码(建图+搜索+并查集)

    思路 step1 邻接表建图 相邻为1 不相邻为0 题目就等价为在图中求连通子图的个数 step2 深度搜索每条边 并存储下来 step3 对选择的边用并查集保存下来 然后看father i i的个数 等于1 表示连通 否则表示不连通 易错