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

题解:P14002 [eJOI 2025] Navigation

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

做法:

首先树是好做的,直接记录深搜栈即可,栈里的标 \(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.zskr.cn/news/52548.html

相关文章:

  • 多媒体与可视化:WebAssembly集成与实时视频贴图
  • 第三章作业 动态规划
  • 11月17日日记
  • 第三十一天
  • AI模型的github——ModelScope.co和Hugging Face.cn
  • 随缘打赏
  • java linux 中文
  • java linux jdk
  • 用 Swift 进行验证码识别
  • 在 parse_model 函数中添加了自定义模块支持
  • 20232311 2025-2026-1 《网络与系统攻防技术》实验六实验报告
  • android compose viewModel 传参数
  • 奶牛快传服务调整公告
  • 从零实现 REINFORCE/GRPO —— 大模型推理强化微调实践
  • 手撸大模型的分布式训练:深刻理解大模型训练的“起飞”原理
  • 从0到1:揭秘LLM预训练前的海量数据清洗全流程
  • instr在mysql索引中作用是什么
  • Python调用C++代码
  • MySQL EXPLAIN中的key_len:精准掌握索引使用情况
  • AWS云服务深度集成
  • httpd linux 启动
  • Node.js服务稳定性保障:从热更新到高可用体系
  • PG系列:在 ​​psql​​ 客户端中定义参数与动态赋值
  • 欢迎关注我的公众号和B站
  • 11/17
  • linux 下中文字体安装.ttf 格式
  • 2025 年锚具厂家 TOP 企业品牌推荐排行榜,桥梁伸缩缝 / 道路伸缩缝 / 梳齿板伸缩缝推荐这十家公司!
  • 2025-11-17
  • 论文速读 | 2025年11月
  • halt linux