2023 ICPC ECfinal J

news/2025/10/12 21:57:44/文章来源:https://www.cnblogs.com/Kescholar/p/19137353

J. Travel 2

思维,模拟搜索。

如果从 \(u\) 选一条边到 \(v\),然后再从 \(v\) 又刚好选到一条边回来 \(u\),那么 \(u-v\) 这条边我们已经知道它分别在 \(u\)\(v\) 里的排名了,一共有 \(m\) 条边,显然 \(2m\) 次可以拿来确定有哪些边。

一开始什么都不知道,考虑从 \(1\) 的第 \(1\) 条边一直出发,以此到 \(v_1,v_2,...\) 的第一条边去找,假如某次询问后又回到了上一个点,那么就从上一个点的第二条边出发,以此往复。

假如某次询问后回到 \(u\) 这个点,而这个点已经已经确定了所有的边,那么可以把这个点标记,接下来去从它所连向的点中找没有确定完所有边的点 \(v\) 去进行上面的搜索过程,确定完 \(v\) 的所有边后再从 \(v\) 回溯到 \(u\),再去找下一个点。

手动模拟一下可以发现的是,除去那 \(2m\) 条确定边的过程中,已经确定完所有边的 \(u\) 去找未确定完所有边的 \(v\) 的过程,就是以 \(u\)\(v\) 的父节点的图中的一颗生成树的树边,而这样的查询过程,向下只会找 \(n-1\) 次,向上回溯需要 \(n-1\) 次,总次数 \(2m+2(n-1)\) 次。

点击查看代码
#include <bits/stdc++.h>using i64 = long long;void solve() {const int N = 2500;std::vector<int> d(N);auto move = [&](int i)->int{std::cout << "> " << i << std::endl;int x;std::cin >> x >> d[--x];return x;};int x, n = 0;std::cin >> x >> d[--x];std::vector<char> vis(N);std::vector<std::vector<int>> adj(N);auto dfs = [&](auto &&self, int u)->void{n = std::max(n, u);if(adj[u].size() < d[u]) {int v = move(adj[u].size() + 1);adj[u].push_back(v);self(self, v);} else{vis[u] = 1;for(int i = 0; i < adj[u].size(); i += 1) {int v = adj[u][i];if(vis[v]) continue;move(i + 1);self(self, v);for(int j = 0; j < adj[v].size(); j += 1) {if(adj[v][j] == u) {move(j + 1);break;}}}}};dfs(dfs, 0);std::cout << "! ";for(int i = 0; i < n; i += 1) {for(auto &v : adj[i]) {if(i > v) {continue;}std::cout << i + 1 << " " << v + 1 << " ";}}std::cout << std::endl;std::string s;std::cin >> s;}
int main() {std::ios::sync_with_stdio(false);std::cin.tie(nullptr);int t;std::cin >> t;while (t--) {solve();}return 0;
}

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

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

相关文章

嵌入式十六进制的地址转换成十进制MB单位

前言全局说明嵌入式开发经常会用到指定使用的内存区域大小或Flash存储芯片大小, 默认都是用16进制表示的,那么怎么换算成人在数学常用的10进制呢一、说明 1.1 基础知识: 在电脑中 0x 开头的都是十六进制表示法,我们…

编译qt【临时】

d:\qt1012\qtgitcode\Build\Work\qt5\qt5-build"..\configure.bat" -platform win32-g++ -xplatform oh-clang -device-option OHOS_ARCH=arm64-v8a -opensource -confirm-license -nom…

20232318 2025-2026-1 《网络与系统攻防技术》 实验一实验报告

一、实验目的本次实验聚焦于 Linux 平台下可执行文件 pwn1 的缓冲区溢出(BOF)漏洞挖掘与 shellcode 注入技术,核心目标是通过三种不同的技术路径篡改程序原有执行流程,从而触发程序中默认不可调用的 getShell 函数…

深入解析:在 CentOS 7.6 上安装 Oracle WebLogic Server 12c 详细教程

pre { white-space: pre !important; word-wrap: normal !important; overflow-x: auto !important; display: block !important; font-family: "Consolas", "Monaco", "Courier New", …

实时Galgame - 动漫角色 语言生成+图片生成

文字转语音 看到B站推荐的视频,想了解到2025年10月最新文字转语言技术,并本地部署跑下 实时Galgame成了! IndexTTS2接入酒馆SillyTavern实时语音,角色语音情感控制,兼容酒馆API调用,B站开源最强AI语音模型 技术栈…

使用DiskGenius检查硬盘状态信息的与坏道检测

使用DiskGenius检查硬盘状态信息的与坏道检测1、下载DiskGenius工具官网下载地址:https://www.diskgenius.cn/download.php 2、解压DiskGenius工具包3、启动DiskGenius工具4、同意许可协议5、查看硬盘状态信息如上图所…

系统响应慢分析案例

响应很慢,这种情况下, 是不是系统资源出现 了瓶颈。所以,先观察 CPU、内存和磁盘 I/O 等的使用情况肯定不会错。应用程序记录大量日志 top ,来观察 CPU 和内存的使用情况观察 top 的输出,你会发现,CPU0 的使用率…

Linux文件系统与磁盘工作原理

磁盘为系统提供了最基本的持久化存储。 文件系统则在磁盘的基础上,提供了一个用来管理文件的树状结构。“Linux 一切皆文件”的深刻含义。无论是普通文件和块设备、还是网 络套接字和管道等,它们都通过统一的 VFS 接…

平安好车主小程序 充电站、加油站列表vmp+wasm逆向

pingan好车主小程序 充电站、加油站列表vmp+wasm逆向声明:仅供学习使用 1.接口概览 url: https://a1d5ce9f4-wx621112590b635086.sh.wxgateway.com/__wx__/call?token=97_6m4bQno7K7H4qamt18Bf8tj-i8zK8oFkQkSgh8N-_…

Linux文件系统的实验

Linux硬、软连接硬连接:指向了同一个物理位置。建立连接之后,INODE是一样的,引用的个数增加。删掉原始的文件,只是把引用删除了。下面图片的1和2就是指物理文件被引用的个数,删除其中一个引用个数就是1了。而且st…

Unity 虚拟仿真实验中设计模式的利用 —— 观察者模式(Observer Pattern)

pre { white-space: pre !important; word-wrap: normal !important; overflow-x: auto !important; display: block !important; font-family: "Consolas", "Monaco", "Courier New", …

软中断softirq的CPU使用率升高

中断是系统用来响应硬件设备请求的一种机制,它会打断进程的正常调度和执行,然后调用内核中的中断处理程序来响应设备的请求。中断其实是一种异步的事件处理机制,可以提高系统的并发处理能 力。 由于中断处理程序会打…

CPU多进程切换导致过载-CPU上下文切换

Linux 支持远大于 CPU 数量的任务同时运行。系统在很短的时间内,将 CPU 轮流分配给它们,造成多任务同时运行的错觉。过多的上下文切换,会把 CPU 时间消耗在寄存器、内核栈以及虚拟内存等数据的保存和恢复上,从而缩…

Vue3 之pinia状态管理

一、文档 https://pinia.vuejs.org/zh/introduction.html 二、简单使用 main.jsimport { createApp } from vue import ./style.css import App from ./App.vue import router from ./router import { createPinia } f…

乐理 -01识谱

资料来源 B站up主 三分钟音乐社识谱音名音调 1=C1=D1=E1=F1=G1=A1=B黑键半音&全音 表示音调间的距离唱名规则 全全半全全全半1=C1=D

shader func

1、step:float step(float edge, float x) vec2 step(vec2 edge, vec2 x) vec3 step(vec3 edge, vec3 x) vec4 step(vec4 edge, vec4 x)GLSL 的 step 函数用于比较两个参数的大小,当第一个参数小于第二个参数时返回 …

案例分析-DDOS攻击、网络延迟(延迟确认纳格算法)、NAT延迟

DDoS 攻击 DDoS 的前身是 DoS(Denail of Service),即拒绝服务攻击,指利用大量的合理请求, 来占用过多的目标资源,从而使目标服务无法响应正常请求。 DDoS(Distributed Denial of Service) 则是在 DoS 的基础上…

服务器丢包分析-iptables规则-MTU大小设置错误-perf-火焰图分析处理请求时内核线程调用

服务器丢包分析--iptables规则以及MTU大小设置错误 容器利用 Linux 内核提供的命名空间技术,将不同应用程序的运行隔离起来,并用统一的 镜像,来管理应用程序的依赖环境。这为应用程序的管理和维护,带来了极大的便捷…

2025 年碟式离心机厂家 TOP 企业品牌推荐排行榜,DB640 系列 / DB330 系列 / DB440 系列 / DB460 系列 / DB550 系列 / 专业碟式离心机推荐这十家公司!

在当前工业生产领域,碟式离心机作为实现物料高效分离的关键设备,其性能与品质直接影响着食品、饮料、化工、制药等众多行业的生产效率与产品质量。然而,随着市场需求的不断增长,碟式离心机制造厂家数量逐渐增多,市…

增加客户粘性

增加客户粘性类别参数官方默认值推荐「陷阱值」慢性症状/客户感知使用举例(如何设陷阱)解除方法(救场操作)Worker workers CPU2+1 1 长请求 502,报表卡死 odoo.conf 写 workers = 1,重启 改回 workers = (CPU*2)…