题解:P14002 [eJOI 2025] Navigation

news/2025/11/17 23:34:32/文章来源:https://www.cnblogs.com/LUlululu1616/p/19234832

题意:有一个仙人掌,但是不告诉你这个图。现在有一个完全没有任何记忆的机器人,每次只告诉你当前走到这个点的颜色和邻点的颜色,保证每次给出点颜色的顺序都一样,你每次可以结束或者给当前点染色并走向一个点。设计一个策略遍历所有点。

做法:

首先树是好做的,直接记录深搜栈即可,栈里的标 \(2\),搜过的标 \(1\)。有 \(0\)\(0\),没有走 \(1\)

考虑点仙人掌,即一个点属于最多一个环的情况。仍然考虑树的做法,发现问题在于出现环的时候解决不了谁是父亲的情况。我们考虑把当前点标为 \(3\) 并随便往一个 \(2\) 走,发现如果是父亲,那么 \(2\) 周围只会有 \(1\)\(2\),而返祖边会有两个。如果走到返祖边就往 \(3\) 回来走即可。

然后考虑边仙人掌,一个点可能属于两个环,那么我们上面的算法就会在两个环的交点出发现有两个 \(2\) 一个 \(3\),就会误判为我走到了一个返祖边,所以我们需要消掉这个 \(3\) 才能保证正确性。

我们考虑走到返祖边回来的时候我们就把当前点标 \(1\) 即可,如果是父亲,我们就把父亲标成 \(0\) 再走回去,这样如果一个点为 \(3\) 并且周围有 \(0\),那么我们就把他变为 \(1\) 并且走向 \(0\) 即可。

代码:

#include<bits/stdc++.h>
using namespace std;
pair<int, int> navigate(int c, vector<int> g) {int cnt[4] = {0, 0, 0, 0}, p[4] = {0, 0, 0, 0};for (int i = 0; i < g.size(); i++)cnt[g[i]]++, p[g[i]] = i;if(cnt[3])return make_pair(cnt[2] > 1 ? 2 : 0, p[3]);if(cnt[0])return make_pair(c == 3 ? 1 : 2, p[0]);if(cnt[2] == 1)return make_pair(1, p[2]);if(cnt[2] == 2) {if(c == 0 || c == 2)return make_pair(3, p[2]);if(c == 3) {int nw = 0;for (int i = 0; i < g.size(); i++)if(g[i] == 2) {nw = i;break;}return make_pair(1, nw);}}return make_pair(-1, -1);
}
//int main() {
//	return 0;
//}

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/968412.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

多媒体与可视化:WebAssembly集成与实时视频贴图

好的,这是一个非常深入且专业的问题,直指高性能Web开发与计算机图形学的核心。下面我将详细分享在海康三维可视化项目中的具体实践与挑战。多媒体与可视化:WebAssembly集成与实时视频贴图 第一部分:WebAssembly集成…

第三章作业 动态规划

实践报告 按照动态规划法的求解步骤分析作业题目“数字三角形”: 1.1 根据最优子结构性质,列出递归方程式,说明方程式的定义、边界条件 递归方程式:dp[i][j] = triangle[i][j] + max(dp[i-1][j-1], dp[i-1][j]) 状…

Java Room与SQLite如何交互

在Android开发中,Room是一个持久性库,它提供了抽象层,使得开发者可以更方便地处理数据库操作。SQLite是一个轻量级的数据库引擎,它是Android内置的数据库解决方案。要在Android应用中使用Room和SQLite交互,你需要…

11月17日日记

1.今天进行java考试做房产信息管理系统开发 2.明天工程实训 3.如何解决http://localhost:8080/ 404的问题

第三十一天

今天的学习聚焦在“路径检索”相关知识,尤其是最短路径的匹配方法,收获特别扎实。 先理清了路径检索的核心两种方法:深度优先搜索(DFS)像走迷宫时一条路走到黑再回溯,优先探完一条分支再换方向;广度优先搜索(B…

wsl 常用命令

wsl安装 wsl --install #会自动安装wsl 和默认Ubuntu#建议将 WSL 默认版本设置为 WSL2,以获得更好的性能和兼容性 wsl --set-default-version 2 #在安装 Ubuntu 之前,更新 WSL 内核也是好习惯 wsl --update#如果要重…

AI模型的github——ModelScope.co和Hugging Face.cn

好的,我来通俗易懂地解释一下 ModelScope 和 Hugging Face 是什么。 您可以把它想象成两个巨大的、开放的“模型应用商店”或“模型图书馆”。1. Hugging Face 核心比喻:AI 模型的 GitHub它是什么? 它是一个全球领先…

逆向基础--C++ 运算符 (05)

逆向基础--C++ 运算符 (05)一.运算符C++的运算符 包括:算术运算符、关系运算符、逻辑运算符、位运算符、赋值运算符、其它运算符。1.1 算术运算符包括:+(加)  -(减)  *(乘)  /(除)  %(取模)  ++(整数值增加…

团队管理与技术驱动

好的,这两个问题是技术管理者核心价值的集中体现。下面我将结合具体实践,系统性地阐述我的管理理念和方法。团队管理与技术驱动 第一部分:技术选型、规划与三者平衡 我的核心理念是:技术是服务于业务和团队的工具,…

日总结 27

RFID,全称为射频识别,是一种利用无线电波进行非接触式自动识别的技术。 你可以把它想象成一个更先进的“条形码”。但与需要直线对准、一次只能扫描一个的条形码不同,RFID具有以下独特优势:非接触式: 无需看见即…

java linux 中文

您提到的“Java Linux 中文”可能是指在 Linux 系统中运行 Java 应用程序,或者与 Java 相关的 Linux 操作。以下是一些与 Java 和 Linux 相关的常见命令和脚本,帮助您更好地在 Linux 环境中使用 Java:一、Java 环境…

java linux jdk

你提到的“Java Linux JDK”可能是指在 Linux 系统上安装和使用 Java 开发环境(JDK)的相关内容。以下是一些常见的 Java 环境安装和管理方法,适用于大多数 Linux 发行版(如 Ubuntu、CentOS、Debian 等)。一、Java…

Mastercam2021软件界面

时间,滴答滴答在消失

用 Python 和 Tesseract OCR 识别复杂验证码

安装依赖首先,确保已安装所需的工具和库。 安装 Tesseract 在 Windows 上,下载安装包并进行安装:Tesseract GitHub。 在 Linux 上,你可以通过以下命令安装: sudo apt-get install tesseract-ocr 安装 Python 库 使…

用 Go 进行验证码识别

安装 Go 和 Tesseract OCR首先,你需要安装 Go 和 Tesseract。 安装 Go:可以从 Go 官方网站 下载并安装。 安装 Tesseract:可以通过以下命令安装 Tesseract OCR。 对于 Ubuntu: sudo apt install tesseract-ocr 对于…

Spring AI Alibaba 项目源码学习(十)-Interceptor

Interceptor 机制分析 请关注微信公众号:阿呆-bot 概述 本文档分析 Spring AI Alibaba Agent Framework 中的 Interceptor(拦截器)机制,包括 ModelInterceptor 和 ToolInterceptor 的设计、实现原理、链式调用机制…

用 Swift 进行验证码识别

安装 Tesseract OCR首先,你需要通过 CocoaPods 来安装 Tesseract OCR 的 Swift 绑定库。首先在项目的根目录下创建一个 Podfile,并添加以下内容: platform :ios, 11.0 target YourAppName do use_frameworks! pod T…

今日复盘

完成了通过ffmpeg将电脑屏幕转为rtsp推流给mediatx服务器,并供给海康威视录像机拉流的实现:ffmpeg -f gdigrab -framerate 15 -video_size 1280x720 -i desktop -c:v libx264 -preset ultrafast -b:v 1500k -maxrate…