当前位置: 首页 > news >正文

信息学奥赛一本通 1347:【例4-8】格子游戏

【题目链接】

ybt 1347:【例4-8】格子游戏

【题目考点】

1. 并查集:判断无向图是否有环

【解题思路】

该题为判断无向图是否有环。可以使用并查集来完成。

学习并查集时,每个元素都由一个整数来表示。而该问题中每个元素是一个坐标点,由(x, y)两个整数构成。
因而有两种方法解决该问题

解法1:将二维坐标变为一个整数

通过一个公式将二维坐标换算为一个整数,用这个整数代表该二维坐标。

例:假设坐标点是2行3列的,每个位置的坐标为x, y,转变后的数字为d,记为(x, y):d

第1列第2列第3列
第1行(1,1):1(1,2):2(1,3):3
第2行(2,1):4(2,2):5(2,3):6

可以推出n行n列的坐标系中,坐标(x,y)转为数字d,公式为:d=(x−1)⋅n+yd=(x-1)\cdot n+yd=(x1)n+y
把每个坐标都用一个数字表示。
每输入一个坐标(x,y),求出其对应的数字f。

  • 如果接下来输入字母D,即向下画,那么与(x,y)连接的点是(x+1, y),求出其对应的数字t。
  • 如果接下来输入字母R,即向右画,那么与(x,y)连接的点是(x, y+1),求出其对应的数字t。

判断f和t是否在一个集合(连通子图)中

  • 如果是,那么f与t连边会形成环,游戏结束。输出游戏结束时的步数。
  • 否则把f和t所在的集合合并。

解法2:直接使用坐标作为并查集中的元素

如果并查集中的元素不为整数,可以将fa数组改为映射(map类型),同时find、merge都发生改变。
解题思路与解法1类似。
在输入时,使用find直接判断两个数对元素是否在一个集合中

  • 如果已在一个集合中,说明两点间有路径连通,再加一条边就会形成环。
  • 否则,使用merge把两个数对元素所在的集合进行合并。

【题解代码】

解法1:将二维坐标变为一个整数

#include<bits/stdc++.h>
using namespace std;
#define N 40005
int fa[N], n, m;
int getNum(int x, int y)//用1个数字代表二维的坐标点 
{return (x-1)*n + y;
}
void init(int n)
{for(int i = 1; i <= n; ++i)fa[i] = i;
}
int find(int x)
{if(x == fa[x])return x;elsereturn fa[x] = find(fa[x]);
}
void merge(int x, int y)
{ fa[find(x)] = find(y);
}
int main()
{int x, y, i, f, t;char c;cin >> n >> m;init(n*n);for(i = 1; i <= m; ++i)//i:第几步 {cin >> x >> y >> c;f = getNum(x, y);if(c == 'D')t = getNum(x+1, y);else//c == 'R't = getNum(x, y+1);if(find(f) == find(t))break;elsemerge(f, t);}if(i <= m)cout << i;elsecout << "draw";return 0;
}

解法2:直接使用坐标作为并查集中的元素

#include<bits/stdc++.h>
using namespace std;
typedef pair<int, int> Pair;
map<Pair, Pair> fa;
Pair find(Pair x)
{if(x == fa[x])return x;elsereturn fa[x] = find(fa[x]);
}
void merge(Pair x, Pair y)
{fa[find(x)] = find(y);
}
int main()
{Pair p, q;int n, m, x, y;char c;cin >> n >> m;for(int i = 1; i <= m; ++i){cin >> x >> y >> c;p = Pair(x, y);if(c == 'D')q = Pair(x+1, y);else//c == 'R'q = Pair(x, y+1);if(fa.count(p) == 0)//如果不存在该点,则初始化 fa[p] = p;if(fa.count(q) == 0)fa[q] = q;if(find(p) == find(q))//p, q已连通,p,q再连边,则存在环 {cout << i;//输出步数 return 0;}merge(p, q);//合并两点 }cout << "draw";return 0;
}

相关文章:

信息学奥赛一本通 1347:【例4-8】格子游戏

【题目链接】 ybt 1347&#xff1a;【例4-8】格子游戏 【题目考点】 1. 并查集&#xff1a;判断无向图是否有环 【解题思路】 该题为判断无向图是否有环。可以使用并查集来完成。 学习并查集时&#xff0c;每个元素都由一个整数来表示。而该问题中每个元素是一个坐标点&a…...

acwing3417. 砝码称重

acwing3417. 砝码称重算法 1: DFS算法2 : DP算法 1: DFS /*** 数据范围 对于 50%的评测用例&#xff0c;1≤N≤15. 对于所有评测用例&#xff0c;1≤N≤100&#xff0c;N 个砝码总重不超过 1e5. */ /* 算法 1: DFS 思路 : 对于每个砝码,有放在左边,放在右边,和不放三种选择,使…...

生成式 AI:百度“文心一言”对标 ChatGPT?什么技术趋势促使 ChatGPT 火爆全网?

文章目录前言一、生成式 AI 的发展和现状1.1、什么是生成式 AI&#xff1f;1.2、生成式 AI 的发展趋势1.3、AI 生成内容的业务场景和分类二、生成式 AI 从分析领域到创作领域2.1、 降低内容创作门槛&#xff0c;增加 UGC 用户群体2.2、提升创作及反馈效率&#xff0c;铺垫线上实…...

PCL 非线性最小二乘法拟合圆柱

文章目录 一、简介二、实现代码三、实现效果参考资料一、简介 这里通过非线性最小二乘的方法来实现圆柱体的拟合,具体的计算过程如下所述: 图中, p p p为输入数据的点位置,求解的参数为柱体的轴向向量 a...

【设计模式】迪米特法则

文章目录一、迪米特法则定义二、迪米特法则分析三、迪米特法则实例一、迪米特法则定义 迪米特法则(Law of Demeter, LoD)&#xff1a;一个软件实体应当尽可能少地与其他实体发生相互作用。 二、迪米特法则分析 如果一个系统符合迪米特法则&#xff0c;那么当其中某一个模块发…...

CSS3笔试题精讲1

Q1 BFC专题 防止父元素高度坍塌 4种方案 父元素的高度都是由内部未浮动子元素的高度撑起的。 如果子元素浮动起来,就不占用普通文档流的位置。父元素高度就会失去支撑,也称为高度坍塌。 即使有部分元素留在普通文档流布局中支撑着父元素,如果浮动 起来的元素高度高于留下的…...

交叉编译用于移植的Qt库

前言 如果在Ubuntu上使用qt开发可移植到周立功开发板的应用程序,需要在Ubuntu上交叉编译用于移植的Qt库,具体做法如下: 1、下载源码 源码qt-everywhere-opensource-src-5.9.6.tar.xz拷贝到ubuntu自建的software文件下 2、解压 点击提取到此处 3、安装配置 运行脚本文…...

泰凌微TLSR8258 zigbee开发环境搭建

目录必备软件工具抓包分析辅助工具软件开发包PC 辅助控制软件 (ZGC)必备软件工具 下载地址&#xff1a;http://wiki.telink-semi.cn/ • 集成开发环境: TLSR8 Chips: Telink IDE for TC32 TLSR9 Chips: Telink RDS IDE for RISC-V • 下载调试工具: Telink Burning and Debugg…...

C#实现商品信息的显示异常处理

实验四&#xff1a;C#实现商品信息的显示异常处理 任务要求&#xff1a; 在进销存管理系统中&#xff0c;商品的库存信息有很多种类&#xff0c;比如商品型号、商品名称、商品库存量等。在面向对象编程中&#xff0c;这些商品的信息可以存储到属性中&#xff0c;然后当需要使…...

细数N个获取天气信息的免费 API ,附超多免费可用API 推荐(三)

前言 市面上有 N 多个查询天气信息的软件、小程序以及网页入口&#xff0c;基本都是通过调用天气查询 API 去实现的。 今天整理了一下多种场景的天气预报API 接口分享给大家&#xff0c;有需要赶紧收藏起来。 天气预报查询 天气预报查询支持全国以及全球多个城市的天气查询…...

20230404英语学习

今日单词 decade n.十年 allocate vt.分配&#xff0c;分派&#xff0c;把…拨给 compress v.压缩&#xff1b;缩短&#xff1b;浓缩 regenerate v.&#xff08;使&#xff09;复兴&#xff0c;&#xff08;使&#xff09;振兴&#xff1b;&#xff08;使&#xff09;再生 …...

冒泡排序 快排(hoare递归)

今天要讲一个是冒泡排序&#xff0c;进一个是快排&#xff0c;首先是冒泡排序&#xff0c;我相信大家接触的第一个排序并且比较有用的算法就是冒泡排序了&#xff0c;冒泡排序是算法里面比较简单的一种&#xff0c;所以我们先看看一下冒泡排序 还是个前面一样&#xff0c;我们…...

49天精通Java,第24天,Java链表、散列表、HashSet、TreeSet

目录一、链表二、散列表三、HashSet四、TreeSet五、TreeSet常用方法大家好&#xff0c;我是哪吒。 一、链表 从数组中间删除一个元素开销很大&#xff0c;其原因是向数组中插入元素时&#xff0c;此元素之后的所有元素都要向后端移动&#xff0c;删除时也是&#xff0c;数组中…...

HashMap源码分析小结

HashMap相关问题 HashMap实现原理 HashMap是以键值对的形式存储数据&#xff0c;内部是通过数组链表结构实现&#xff0c;在1.7之后的版本&#xff0c;链表结构可以升级为红黑树&#xff0c;提高查询效率 key和value都支持为null&#xff1b;key为null时hash值是0&#xff0…...

太奇怪了!小公司面试全挂,大厂面试全过,为什么小公司要求比大厂还高?...

大厂的人才去小公司面试&#xff0c;一定是降维打击吗&#xff1f;还真未必。一位网友很困惑&#xff1a;真的奇怪&#xff0c;小公司面试全挂&#xff0c;大厂面试10个过了9个&#xff0c;感觉小公司要求比大厂还高&#xff0c;这是怎么了&#xff1f;来看看网友们的看法。有人…...

Java开发环境配置

Java开发环境配置 Java是目前世界上最流行的编程语言之一&#xff0c;它的使用范围广泛&#xff0c;从Web应用程序到桌面应用程序再到移动应用程序&#xff0c;Java都是一种非常有用的语言。想要进行Java开发&#xff0c;首先需要在计算机上配置Java开发环境。 在本文中&…...

大学英语视听说教程(陈向京版本)

词汇题&#xff08;55道&#xff09; 1. You should carefully think over_____ the manager said at the meeting. A. that B. which C. what D. whose 1.选C,考察宾语从句连接词&#xff0c;主句谓语动词think over后面缺宾语&#xff0c;后面的宾语从句谓语动…...

nginx--开源免费

nginx开源免费&#xff0c;支持高性能&#xff0c;高并发的web服务和代理服务软件。 apache,nodejs nginx可以提供的服务&#xff1a; 1、web服务 2、负载均衡&#xff08;反向代理&#xff09;&#xff08;动静分离&#xff09; 3、web cache(web缓存&#xff09; nginx…...

阿里云OSS对象存储

目录 1&#xff1a;OSS 1.1&#xff1a;开通OSS服务 1.2&#xff1a;搭建OSS环境 1.2.1&#xff1a;创建Bucket存储空间 1.2.2&#xff1a;创建文件夹上传图片 1.2.3&#xff1a;RAM访问控制 1.3&#xff1a;快速入门 1.3.1&#xff1a;下载SDK 1.3.2&#xff1a;搭建环…...

基于VHDL语言的汽车测速系统设计_kaic

摘 要 汽车是现代交通工具。车速是一项至关重要的指标。既影响着汽车运输的生产率,又关乎着汽车行驶有没有超速违章&#xff0c;还影响着汽车行驶时人们的人身安全。而伴随着我国国民的安全防范意识的逐步增强&#xff0c;人们也开始越来越关心因为汽车的超速而带来的极其严重…...

VideoSrt:零基础视频字幕自动化解决方案

VideoSrt&#xff1a;零基础视频字幕自动化解决方案 【免费下载链接】video-srt-windows 这是一个可以识别视频语音自动生成字幕SRT文件的开源 Windows-GUI 软件工具。 项目地址: https://gitcode.com/gh_mirrors/vi/video-srt-windows 视频创作者的效率痛点&#xff1a…...

收藏!小白也能看懂的大模型推理能力训练与未来趋势深度解析

文章讨论了大模型的发展历程&#xff0c;从早期的“读很多书”模式到引入“思考”能力的转变。重点介绍了推理式思考与智能体式思考的区别&#xff0c;以及Qwen团队在模型训练中的经验与挑战。文章指出&#xff0c;未来的重心将从单纯训练模型“思考”转向训练智能体“边想边做…...

什么时候Agent能自己写skill?从极客视角看AI智能体自主进化与实在Agent落地实践

关于人工智能智能体&#xff08;AI Agent&#xff09;何时能够自主编写技能&#xff08;Skill&#xff09;这一课题&#xff0c;根据2026年4月1日的最新科技前沿动态分析&#xff0c;我们正处于从“人工定义技能”向“智能体自主生成与进化技能”跨越的关键转折点。当前的行业共…...

RevokeMsgPatcher 2.1:实用高效的微信QQ防撤回完整解决方案

RevokeMsgPatcher 2.1&#xff1a;实用高效的微信QQ防撤回完整解决方案 【免费下载链接】RevokeMsgPatcher :trollface: A hex editor for WeChat/QQ/TIM - PC版微信/QQ/TIM防撤回补丁&#xff08;我已经看到了&#xff0c;撤回也没用了&#xff09; 项目地址: https://gitco…...

基于Phi-3-mini-128k-instruct构建运维智能助手:Linux命令分析与故障排查

基于Phi-3-mini-128k-instruct构建运维智能助手&#xff1a;Linux命令分析与故障排查 1. 引言 想象一下这个场景&#xff1a;凌晨两点&#xff0c;服务器监控告警突然响起&#xff0c;CPU使用率飙升到90%&#xff0c;内存也快见底。你睡眼惺忪地登录服务器&#xff0c;面对满…...

如何高效解决Windows驱动存储臃肿问题?DriverStore Explorer带来75-90%的空间释放效率提升

如何高效解决Windows驱动存储臃肿问题&#xff1f;DriverStore Explorer带来75-90%的空间释放效率提升 【免费下载链接】DriverStoreExplorer Driver Store Explorer [RAPR] 项目地址: https://gitcode.com/gh_mirrors/dr/DriverStoreExplorer Windows系统随着使用时间增…...

从噪音到宁静:5种高级风扇控制策略深度解析

从噪音到宁静&#xff1a;5种高级风扇控制策略深度解析 【免费下载链接】FanControl.Releases This is the release repository for Fan Control, a highly customizable fan controlling software for Windows. 项目地址: https://gitcode.com/GitHub_Trending/fa/FanContro…...

告别数据下载烦恼:5分钟用GEE(Google Earth Engine)在线获取任意区域DEM高程数据

告别数据下载烦恼&#xff1a;5分钟用GEE在线获取任意区域DEM高程数据 在科研和工程实践中&#xff0c;数字高程模型&#xff08;DEM&#xff09;是地形分析的基础数据。传统获取方式往往需要经历数据搜索、分幅下载、格式转换、多图拼接等一系列繁琐步骤&#xff0c;对于非GI…...

CosyVoice语音克隆实战:如何用300M轻量级模型实现跨语种音色复制

CosyVoice语音克隆实战&#xff1a;如何用300M轻量级模型实现跨语种音色复制 在数字内容创作领域&#xff0c;语音合成技术正经历着从机械朗读到情感化表达的质变。CosyVoice-300M作为一款轻量级语音克隆模型&#xff0c;以其仅300MB的体量实现了专业级的音色复制与跨语种转换能…...

智能处理与开源工具:突破传统背景抠图限制的实时解决方案

智能处理与开源工具&#xff1a;突破传统背景抠图限制的实时解决方案 【免费下载链接】obs-backgroundremoval An OBS plugin for removing background in portrait images (video), making it easy to replace the background when recording or streaming. 项目地址: https…...