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

LOJ #3835. 「IOI2022」千岛 题解

Description

千岛是爪哇海里一组美丽的岛屿,其中有 \(N\) 个岛屿,编号为从 \(0\)\(N - 1\)

\(M\) 艘独木舟在岛屿之间航行,编号为从 \(0\)\(M - 1\)。对于满足 \(0 \le i \le M - 1\) 的所有 \(i\),独木舟 \(i\) 可以停靠在岛屿 \(U_i\)\(V_i\),并且在岛屿 \(U_i\)\(V_i\) 之间航行。具体来说,当独木舟停靠在岛屿 \(U_i\) 时,可以用它从岛屿 \(U_i\) 去往岛屿 \(V_i\),此后该独木舟就变成停靠在岛屿 \(V[i]\)。类似地,当该独木舟停靠在岛屿 \(V[i]\) 时,它可以从岛屿 \(V_i\) 航向岛屿 \(U_i\),此后该独木舟就变成停靠在岛屿 \(U_i\)。在初始时,该独木舟停靠在岛屿 \(U_i\)。可能有多艘独木舟能用于在同一对岛屿之间航行。也可能会有多艘独木舟停靠在同一个岛屿处。

出于安全考虑,各艘独木舟在每次航行后必须进行维修,因此同一独木舟不允许紧接着完成两次航行。也就是说,在用完某艘独木舟 \(i\) 后,必须先用过另外某艘独木舟,才能再启用独木舟 \(i\)

Bu Dengklek 想策划一次在部分岛屿之间的旅行。她的旅程是合理的,当且仅当满足如下条件:

  • 她的旅程应从岛屿 \(0\) 开始,并且在该岛屿结束。
  • 她应该游览岛屿 \(0\) 之外的至少一个岛屿。
  • 在旅行结束后,每艘独木舟应停靠在旅行开始前它所在的岛屿。也就是说,对于满足 \(0 \le i \le M - 1\) 的所有 \(i\),独木舟必须停靠在岛屿 \(U_i\)

请你帮助 Bu Dengklek 找出包括至多航行 \(2\;000\;000\) 次的合理旅行,或者告诉她不存在合理旅行。
可以证明,在本题所给出的约束条件下(参见约束条件部分),如果存在合理旅行,则必然存在航行次数不超过 \(2\;000\;000\) 次的合理旅行。

\(N\leq 10^5,M\leq 2\times 10^5\)

Solution

首先直接是不好构造的,考虑删点。

容易发现出度为 \(0\) 的点一定不能被经过,所以可以把这些点删掉,删掉后可能会生成新的出度为 \(0\) 的点,用拓扑排序的东西维护即可。

现在每个点的出度都至少是 \(1\) 了。如果起点 \(0\) 的出度为 \(1\),则在走的过程中不能经过 \(0\),可以把 \(0\) 删掉,并把起点 \(s\) 设为 \(nxt_0\)

可以证明只要当前的 \(s\) 出度大于等于 \(2\) 则一定有解。设 \(v_1\)\(s\) 第一个出边的终点,\(v_2\) 是第二个出边的终点。

如果 \(v_1\)\(v_2\) 一起走可以走到同一个点 \(x\),则可以构造成 \(s\) 先沿着 \(v_1\) 走到 \(x\),再在 \(x\) 这里走一个环,然后走回 \(v_1\)\(s\)。对 \(v_2\) 做同样的事情。(注意这里走的过程是需要动态改变边的方向的)

如果走不到同一个点,那么两个点可以走到不同的环,则 \(s\)\(v_1\) 再走环回到 \(v_1\)\(s\),再走 \(v_2\) 的环,然后走 \(v_1\) 的环,再走 \(v_2\) 的环即可。

直接分讨可能细节较多,这里有一个非常优美的写法是从 \(s\) 暴力 dfs,记录上一条走的边 \(lst\),每次枚举任意一条不是 \(lst\) 的出边走。如果当前时刻回到 \(s\) 且每条边都以达到初始状态就停止。经过手玩会发现这个写法刚好能囊括刚才的所有讨论,且细节大幅减少。

时间复杂度:\(O((N+M)\log N)\)

Code

#include "islands.h"
#include <bits/stdc++.h>const int kMaxN = 2e5 + 5;int n, m, s, cnt;
int op[kMaxN];
std::set<std::pair<int, int>> G[kMaxN], rG[kMaxN];
std::queue<int> q;
std::vector<int> vec;
bool del[kMaxN];void topo() {for (; !q.empty(); q.pop()) {int u = q.front();if (del[u]) continue;del[u] = 1;for (auto [v, id] : rG[u]) {if (del[v]) continue;G[v].erase({u, id});if (!G[v].size()) q.emplace(v);}}
}void dfs(int u, int lst) {if (u == s && !cnt && lst != -1) return;// std::cerr << u << ' ' << lst << ' ' << cnt << '\n';for (auto [v, id] : G[u]) {if (id == lst) continue;cnt += (!op[id] ? 1 : -1), op[id] ^= 1, vec.emplace_back(id);G[u].erase({v, id}), G[v].emplace(u, id);return dfs(v, id);}
}std::variant<bool, std::vector<int>> find_journey(int N, int M, std::vector<int> U, std::vector<int> V) {n = N, m = M;for (int i = 0; i < m; ++i) {op[i] = 0, G[U[i]].emplace(V[i], i), rG[V[i]].emplace(U[i], i);}for (int i = 0; i < n; ++i)if (!G[i].size())q.emplace(i);topo();// std::cerr << s << ' ' << G[s].size() << '\n';s = 0;std::vector<int> tmp;for (; G[s].size() == 1;) {auto [nxt, id] = *G[s].begin();// std::cerr << "shabi " << s << ' ' << nxt << ' ' << id << '\n';q.emplace(s), tmp.emplace_back(id), s = nxt;topo();}if (!G[s].size() || del[s]) return false;for (int i = 0; i < n; ++i) {for (; G[i].size() > (i == s) + 1; G[i].erase(G[i].begin())) {}}dfs(s, -1);std::vector<int> res = tmp;for (auto x : vec) res.emplace_back(x);std::reverse(tmp.begin(), tmp.end());for (auto x : tmp) res.emplace_back(x);// std::cerr << "??? " <<  tmp[0] << ' ' << res[0] << '\n';// for (auto x : res) std::cerr << x << ' ';// std::cerr << '\n';return res;
}

相关文章:

LOJ #3835. 「IOI2022」千岛 题解

Description 千岛是爪哇海里一组美丽的岛屿,其中有 \(N\) 个岛屿,编号为从 \(0\) 到 \(N - 1\)。 有 \(M\) 艘独木舟在岛屿之间航行,编号为从 \(0\) 到 \(M - 1\)。对于满足 \(0 \le i \le M - 1\) 的所有 \(i\),独木舟 \(i\) 可以停靠在岛屿 \(U_i\) 或 \(V_i\),并且在岛…...

(附源码)高校拼车管理系统的设计与实现 - 实践

(附源码)高校拼车管理系统的设计与实现 - 实践pre { white-space: pre !important; word-wrap: normal !important; overflow-x: auto !important; display: block !important; font-family: "Consolas", "Monaco", "Courier New", monospace …...

Ubuntu取消vim自动对齐

方法一:在 Vim 中临时关闭自动对齐 在 Vim 编辑文件时,进入命令模式(按 Esc),然后输入以下命令: :set paste这会进入“粘贴模式”,关闭所有自动缩进和格式化功能,适合粘贴代码或手动编辑。 要重新开启自动功能,输入: :set nopaste方法二:修改或创建用户配置文件 vim…...

AI产品测试学习路径全解析:从业务场景到代码实践

深入AI测试领域,掌握核心技能与学习路线 在AI技术日益普及的今天,AI产品的质量保障成为关键环节。如何系统学习AI测试并掌握其核心技能?本文基于一线专家的实战经验,为你梳理出一条清晰的学习路径,涵盖业务理解、指标计算与性能测试三大阶段。 一、先理解业务场景,再制定…...

代码随想录算法训练营第一天 | leetcode 704 27 977

第一题二分查找 简答回答:经典的二分查找,采用的是左闭右闭区间,主要需要注意的就是右区间的下标 代码如下:class Solution { public int search(int[] nums, int target) { int left = 0;//左下标 int right = nums.length-1;//右下标 //循环条件 …...

中文医学基准测试题库数据集:28万条标准化JSON格式医师考试题目与临床案例分析,覆盖28个医学专业领域,用于医学AI模型训练、临床决策支持系统开发、医学知识问答系统构建、医学教育辅助工具优化

获取更多高质量数据可以访问典枢平台 https://dianshudata.com 引言与背景 在人工智能技术快速发展的今天,医疗健康领域正迎来前所未有的变革机遇。医学人工智能系统的研发与应用已成为推动医疗服务质量提升、降低医疗成本、提高诊疗效率的重要途径。然而,构建高质量的医学AI…...

GNSS终端授时方式

GNSS终端授时方式介绍了为什么GNSS接收机能够授时 为什么需要四颗星才能够定位?应该还有很多朋友不太了解 GNSS卫星定位的基本原理。 第二是我最近构思了后续文章的主题,后续文章需要用到GNSS定位的基本原理,所以今天提前介绍一下,算是给后续文章做一个铺垫。 理想情况下两…...

SpringAI接入DeepSeek大模型实现流式对话

SpringAl接入DeepSeek大模型,可实现对话模型(deepseek-chat)和推理模型(deepseek-reasoner)的交互。 ChatClienti适用于复杂功能开发,而ChatModel更适合简单场景。一、 环境配置 Spring AI 支持 Spring Boot 3.4.x,JDK支持需要17以上 添加快照存储库 <repositories><…...

函数计算的云上计费演进:从请求驱动到价值驱动,助力企业走向 AI 时代

函数计算的演进史,其实也是一部计费方式的演化史。透过计费这一窗口,我们可以一管窥全豹,清晰地看到背后产品形态在技术与体验上的深刻变化,以及技术架构随应用场景不断演化的能力。作者:砥行 在云计算的发展过程中,计费方式往往是开发者最直观的感知。最初,用户需要直接…...

【SPIE出版】第五届计算机图形学、人工智能与数据处理国际学术会议

第五届计算机图形学、人工智能与数据处理国际学术会议 2025 5th International Conference on Computer Graphics, Artificial Intelligence and Data Processing (ICCAID 2025) 在这里看会议官网详情 大会时间:2025年10月31-11月2日 大会地点:中国-南昌-南昌航空大学 截稿时…...

通知语音播报功能,解锁全新体验

在触达用户的多种途径中,推送通知消息凭借其高效性和便捷性,成为一种高性价比的营销手段。然而由于各应用推送频率过高,导致重要通知消息常被淹没在海量信息中,难以及时触达用户。比如商家的新订单提醒或者是收款到账通知等重要提醒,往往会因为消息过多而被用户忽视。 为解…...

使用AI容器镜像部署Qwen大语言模型

场景简介 在本实验场景中,将使用Alibaba Cloud AI Containers(AC2)容器镜像服务,通过Docker容器镜像部署Qwen系列大语言模型。本实验场景基于第八代Intel实例,使用Alibaba Cloud Linux 3作为实验系统,使能Intel最新的 AI 加速指令集,提供完整的容器生态支持。 本实验场景…...

【IEEE冠名,香港中文大学(深圳)主办)第五届IEEE能源工程与电力系统国际学术会议(IEEE-EEPS 2025)

第五届IEEE能源工程与电力系统国际学术会议(IEEE-EEPS 2025) 2025 5th IEEE International Conference on Energy Engineering and Power Systems 在这里看会议官网详情 2025年10月31-11月2日 中国深圳 截稿日期:看官网 提交检索:提交至 IEEE Xplore、EI Compendex、Scop…...

C#实现Access表格自增ID的重置

方法一 SQL语句修改: ALTER TABLE 表名 ALTER COLUMN [ID列名] COUNTER(1,1) 原理: 直接修改自增列的属性,强制其下一个生成的值从1开始(COUNTER(起始值, 步长)) 适用条件: 表必须完全为空(DELETE 操作已清空所有数据); 必须在全新的数据库连接中执行(不能与删除数据…...

sumifs根据条件求和

=SUMIFS(分数!$G$5:$G$72,姓名!$C$5:$C$72,A1) 即统计求和所有名字为A1单元格内数据的学生分数 分数!$G$5:$G$72 需要统计的数值所在行姓名!$C$5:$C$72 需要匹配的条件所在行A1/"=100" 匹配条件单元格内的数据/匹配条件...

ubuntu服务器docker安装部署ngix

1、docker pull nginx 2、DockerfileFROM nginx:alpine# 维护者信息 LABEL maintainer="Your Name <your@email.com>"# 将构建好的前端文件复制到Nginx的默认静态文件目录 COPY dist/ /usr/share/nginx/html/# 将自定义的Nginx配置文件复制到Nginx的配置目录 C…...

c++右值引用和移动语义

1. 什么是右值?左值:有名字,可以找到它放在哪(能取地址的)。 比如:int a = 10; // a 是左值右值:临时的、没名字的,用完就没了的东西。 比如:int b = a + 5; // a+5 是个临时值,就是右值 int c = 100; // 100 这个字面量也是右值你可以理解为: 左值像“家里…...

彩笔运维勇闯机器学习--梯度下降法

前言 彩笔运维勇闯机器学习,今天我们来讨论一下梯度下降法 梯度 首先要搞明白什么是梯度,那就要先从导数说起 导数 函数\(y=f(x)\)的自变量\(x\)在一点\(x_0\)上产生一个增量\(\Delta x\)时,函数输出值的增量\(\Delta y=f(x_0 + \Delta x)-f(x_0)\)与自变量增量\(\Delta x\)…...

作业03

问题一 static修饰的方法有: 工具类方法、工厂方法(用于创建对象) 不用static修饰方法的特性:实例方法依赖类的对象,直接在方法内部访问 getName方法依赖于Student的对象,不应该用static修饰 问题二 在购物车场景里,分别讨论参与的实体、实体的行为和实体的状态,如购物…...

项目管理软件产业革命:从工具升级到生产力范式转移

项目管理软件产业革命:从工具升级到生产力范式转移 当微软Teams项目管理模块的日活用户突破3000万大关时,这个数字背后折射出的不仅是单一产品的成功,更预示着全球企业协作方式正在经历一场深刻的范式转移。Gartner最新预测显示,到2025年全球项目管理软件市场规模将突破280…...

vs code运行Java遇到的输入问题

关于在vs code中运行Java无法输入鸣谢我的室友徐同学和亲爱的元宝同学还有ChatGPT老师为什么 code runner内置的编译逻辑是直接运行你的代码,但是java的独特输入方式正好与其不同,导致直接默认输入为空 public class Sqrt{public static void main(String[] args) {double EP…...

关于数据跨境,你应该了解的合规难题有哪些?

数据跨境合规难破?匿名化就丢数据价值?本文详解如何攻克隐私保护与算法研发的矛盾,从精准模糊到生成式AI匿名化技术,助你合规传输高价值数据,释放全球研发潜能!当下正是一个由数据驱动的伟大变革时代。从ADAS到AD,每一次技术的跃迁都离不开海量道路数据的采集、标注与分…...

国内开发者如何选择代码管理平台?三大主流工具深度对比

国内开发者如何选择代码管理平台?三大主流工具深度对比 在数字化转型浪潮席卷全球的当下,代码管理平台已成为开发者日常工作中不可或缺的基础设施。面对Gitee、GitHub与Bitbucket这三大主流平台,国内开发者该如何做出最适合自己的选择?本文将从本土化支持、功能特性、企业适…...

doubletrouble wp复盘

因为这台机子形式比较特殊,所以做个wp nmap ┌──(kali㉿kali)-[~/replay/doubletr] └─$ nmap -sT -p- 192.168.48.67 Starting Nmap 7.95 ( https://nmap.org ) at 2025-09-10 23:17 EDT Nmap scan report for 192.168.48.67 Host is up (0.0058s latency). Not shown: 6…...

VAR算法

向量自回归模型,简称VAR模型,是AR 模型的推广,是一种常用的计量经济模型。在一定的条件下,多元MA和ARMA模型也可转化成VAR模型。 单变量的时间序列的分析模式可以推广到多变量时间序列,建立向量自回归模型。向量自回归模型通常用于描述多变量时间序列之间的变动关系。多变…...

mysql 万能恢复主从Slave_SQL_Running 是No

STOP SLAVE;SET GLOBAL SQL_SLAVE_SKIP_COUNTER = 1; # 这个值可改大START SLAVE;SHOW SLAVE STATUS\G;无聊我就学英语...

刚刚 Java 25 炸裂发布!让 Java 再次伟大

刚刚,Java 25 正式发布! Java 25 都发布了哪些新特性?有没有必要升级?一篇文章,带你速通 Java 新特性。大家好,我是程序员鱼皮。 刚刚,Java 25 正式发布!这是继 Java 21 之后,又一个 LTS 长期支持版本,也是 Java 开发者们最期待的版本之一。其中有个特性可以说是颠覆…...

go 语言结构和基础语法

结构和语法基础包声明 package main引入包函数init函数 22 会先执行init函数在执行main 函数 -------init------ hello world ------main--------变量标识符行分隔符语句&表达式注释公有成员和私有成员关键词、保留字和预定义标志引用类型切片 map channel interface func关…...

详细介绍:Linux--初识网络

详细介绍:Linux--初识网络pre { white-space: pre !important; word-wrap: normal !important; overflow-x: auto !important; display: block !important; font-family: "Consolas", "Monaco", "Courier New", monospace !important; font-siz…...

lua程序调试方法

使用腾讯luahelper插件(lua全家桶,其中调试部分应用了LuaPanda实现) 主要有两个功能,一个是附加到已经运行的lua程序上,另一个是用debug方式运行lua程序文件,安装后默认没有配置文件,先add config就好。纯属记录程序人生,如有差错,欢迎指正,轻喷...

维保信息查询

超聚变查看维保信息: https://www.xfusion.com/support/#/zh/maintenance-information...

人工智能学习路线学习资料整理

人工智能学习资料(个人整理) 先导 开始之前,让我们先看几个demo和视频 【纪录片】阿尔法狗【双语特效字幕】 https://www.bilibili.com/video/BV1pE411y7Pu/?spm_id_from=333.337.search-card.all.click&vd_source=d5f2b87dc23c8806dfc6d9550f24aaf2路线 书籍资源—理论…...

软件设计师知识点总结(2023)上

第1题: 第2题: 第3题: 第4题: 第5题: 第6题:第7题:第8题: 第9题: 先来先服务:最短寻道时间:电梯调度: 单向扫描: 第10题: 第11题: 第12题: 第13题: 第14题: 第15题: 第16题: 第17题: 第18题: 第19题:...

【运维自动化-标准运维】各类全局变量使用说明(中)

一、集群资源筛选 此变量用于按照资源筛选方案创建新的集群。 创建 输入名称和KEY值 引用 ${KEY}引用${KEY},返回的是创建集群成功的信息Allocate {set_number} sets with names: 引用${KEY._module},返回的是集群下的模块信息,类型为字典,键为模块名,值为模块下的主机列表…...

提示词工程(Prompt Engineering)是不是“新时代的编程”?

一、引子:为什么大家开始重视 Prompt?从 ChatGPT、Claude 到文生图工具(Stable Diffusion、MidJourney),AI 输出的质量高度依赖输入的提示词。不同的人输入同样的问题,得到的答案可能天差地别。出现了一个新角色:提示词工程师(Prompt Engineer),甚至有公司开出年薪几…...

python日志记录之logging模块

logging模块是python中用于提供格式化输出的模块。...

O - Color a Tree

题意:任务是在一棵树状结构中以最小的成本完成所有节点的染色,如果要染一个节点那么他的父节点必须已经染过色。染色成本取决于节点的染色成本因子与染色时间。通过分析得出正确的染色策略,并给出了一种有效的算法实现。 错误的贪心策略:对于一个节点的子节点 染过这个结点…...

电脑时间改了,软件不能用了

软件突然不能用了,检查没什么问题,重装也查不出来毛病,想再卸载的时候,发现日期改成了几年前。 日期改正软件就好了。。。...

OFDM 自适应功率与比特分配

1. 要点场景:单用户 OFDM,频率选择性衰落,完美 CSI 目标:总功率约束下 最大化速率 或 总速率约束下 最小化功率 算法:注水(Water-Filling)——理论最优 Chow——次优,低复杂度 Hughes-Hartogs——贪婪,最优但慢输出:子载波功率、比特数、BER vs Eb/N0、容量曲线2. 结…...

前 k 小问题期末考

有意思P6646...

1380亿条微博全量数据集,可用于自然语言处理、情感分析、舆情分析、推荐系统、用户行为数据、商业智能、人工智能模型训练、中文文本数据、地理位置信息、时间序列分析、JSON格式、机器学习、文本挖掘等

引言与背景 在数字化时代,社交媒体数据已成为理解人类行为、社会趋势和语言演变的宝贵资源。微博作为中国最大的社交媒体平台之一,汇聚了亿万用户的真实表达,承载着丰富的社会信息和文化内涵。本数据集自2015年开始采集至今,累计收集了约1380亿条微博数据,为人工智能研究、…...

本土化技术平台的崛起:Gitee如何重塑中国开发者生态

本土化技术平台的崛起:Gitee如何重塑中国开发者生态 在数字化转型浪潮席卷全球的当下,中国开发者生态正经历着一场深刻的变革。作为这一变革的重要见证者和推动者,Gitee这一本土代码托管平台凭借其独特的本土化优势,正在重新定义中国开发者的工作方式。最新数据显示,Gitee…...

一次内网穿透的实践

博主还在上学,因为要经常跑一些仿真实验(实验需要在Linux系统下才能跑),而博主手里有两台台式主机: 1)实验室主机(windows系统,性能较弱) 2)宿舍主机(windows系统,性能较强) 但是由于老师经常派活所以本人大部分时间还是位于实验室的,这就导致大部分时间我都是利…...

m1芯片怎么安装windows系统

如何在M1芯片Mac上安装Windows系统 一、M1芯片与Windows系统的兼容性介绍 Apple M1芯片是苹果公司推出的首款专为Mac设计的基于Arm架构的处理器。它集成了CPU、GPU、神经网络引擎等组件,使得Mac电脑在性能、能效等方面有了显著提升。然而,由于M1芯片采用的是Arm架构,而Windo…...

m1оƬװx86windowsϵͳ

如何在M1芯片上安装x86 Windows系统 随着技术的不断进步,苹果公司推出的搭载M1芯片的Mac电脑凭借其出色的性能和能效比受到了广泛欢迎。然而,对于一些需要运行特定Windows应用程序的用户来说,如何在基于ARM架构的M1芯片上安装原本为x86架构设计的Windows系统成为了一个挑战。…...

C++ 强制类型转化

C++ 提供了四种显式强制类型转换运算符(static_cast、dynamic_cast、const_cast、reinterpret_cast),相比 C 风格的强制转换((类型)表达式),它们更具针对性、可读性和安全性,能让转换意图更清晰,且编译器可提供更严格的检查。 1、static_cast - 静态转换 用于编译器可在…...

Linux shred 命令:安全擦除文件指南

Linux shred 命令:安全擦除文件指南Linux 中的 shred 命令是一个用于​​安全删除文件​​的工具,它通过多次覆盖文件内容来确保数据难以恢复,非常适合处理敏感信息。下面我将为你详细解释这个命令的用法、注意事项以及典型应用场景。 🛡️ Linux shred 命令:安全擦除文件…...

研究生化学英文题库数据集:300万条LaTeX格式AI训练资源,覆盖有机化学物理化学无机化学分析化学,用于智能评估系统、个性化学习平台、化学知识图谱构建、自动化工具开发、深度学习模型

引言与背景 在当今人工智能技术飞速发展的时代,专业化学教育领域正面临着前所未有的变革机遇。化学作为一门基础性、应用性极强的学科,其教育质量的提升直接关系到国家科技创新能力和人才培养水平。然而,传统的化学教育模式在个性化学习、智能评估和知识体系构建方面仍存在诸…...

lvm硬盘分区与不分区优缺点

一、不分区,直接用整块硬盘创建 PV pvcreate /dev/sdb vgcreate myvg /dev/sdb 优点:简单快捷,少了一层分区表的管理。硬盘整个容量都能交给 LVM 管理,空间利用最大化。避免分区表损坏导致 LVM 无法识别的问题。缺点:硬盘完全交由 LVM 使用,不能轻易与其他用途(比如放一…...

中电金信能碳虚拟电厂数智化平台破局“双碳”难题

在国家“双碳”目标持续推进的背景下,零碳园区已成为实现碳达峰碳中和(“双碳”)的重要抓手。2023年《国家碳达峰试点建设方案》提出选取100个典型城市和园区试点;2024年中央经济工作会议首次提出建设一批“零碳园区”;2025年3月政府工作报告将“零碳园区”建设纳入年度重…...