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

Just Another Disney Problem

Just Another Disney Problem

有一个 \(n \leq 1000\) 个点的竞赛图,你可以进行最多 \(10000\) 次询问,每次询问形如:

  • 给出 \(u\)\(v\),交互库返回边 \(u \to v\) 的存在性。

你需要在询问后给出该图的一条哈密顿路径,或报告无解。


关于竞赛图必然存在哈密顿路径的证明:

考虑归纳证明,对于 \(n \leq 2\) 此性质必然成立,不妨设 \(n = n_0\) 时性质成立。

设前 \(n_0\) 个点的哈密顿路径为 \(v_1 \rightarrow v_2 \rightarrow \dots \rightarrow v_{n_0}\),此时将 \(n_0 + 1\) 加入路径。

有以下两种简单的情况:

  • \(n_0 + 1 \rightarrow v_1\),此时有 \(n_0 + 1 \rightarrow v_1 \rightarrow v_2 \rightarrow \dots \rightarrow v_{n_0}\)

  • \(v_{n_0} \rightarrow n_0 + 1\),此时有 \(v_1 \rightarrow v_2 \rightarrow \dots \rightarrow v_{n_0} \rightarrow n_0 + 1\)

若上面两种情况不成立,说明必然存在 \(v_1 \rightarrow n_0 + 1\)\(n_0 + 1 \rightarrow v_{n_0}\)

考虑一个 \(01\) 序列 \(a\)\(a_i = 0\) 表示 \(v_i \rightarrow n_0 + 1\)\(a_i = 1\) 表示 \(n_0 + 1 \rightarrow v_i\)

显然我们有 \(a_1 = 0\)\(a_{n_0} = 1\),则必然会有一个 \(i\) 使得 \(a_i = 0\)\(a_{i+1} = 1\)

则此时有 \(v_1 \rightarrow v_2 \rightarrow \dots \rightarrow v_i \rightarrow n_0 + 1 \rightarrow v_{i+1} \rightarrow v_{i+2} \rightarrow \dots \rightarrow v_{n_0}\)


考虑直接套上面的做法,显然可以直接二分,做完了,注意常数即可。

//Ad astra per aspera
#include<iostream>
#include<cstdio>
#include<algorithm>
#include<string>
#include<vector>
#include<random>
#include<algorithm>
#include<ctime>
using namespace std;
string qa;
mt19937 rnd(time(0));
int id[1010];
int main(){int n;cin>>n;if(n==1){cout<<"0 1"<<endl;return 0;}for(int i=1;i<=n;i++){id[i]=i;}shuffle(id+1,id+n+1,rnd);cout<<"1 "<<id[1]<<" "<<id[2]<<endl;vector<int> path;cin>>qa;if(qa=="YES"){path.push_back(id[1]);path.push_back(id[2]);}else{path.push_back(id[2]);path.push_back(id[1]);}for(int i=3;i<=n;i++){vector<int> new_path;int l=-1,r=i-1;while(r-l>1){int mid=(l+r)/2;cout<<"1 "<<id[i]<<" "<<path[mid]<<endl;cin>>qa;if(qa=="YES"){r=mid;}else{l=mid;}}for(int j=0;j<=l;j++){new_path.push_back(path[j]);}new_path.push_back(id[i]);for(int j=r;j<=i-2;j++){new_path.push_back(path[j]);}path=new_path;}cout<<"0 ";for(int i=0;i<=n-1;i++){cout<<path[i];if(i<=n-2){cout<<" ";}}cout<<endl;return 0;
}
http://www.jsqmd.com/news/821152/

相关文章:

  • Arduino LED限流原理与亮度控制:从欧姆定律到PWM调光
  • 2026年新加坡留学中介机构前十解析,低绩点学子优选攻略 - 速递信息
  • 数字电源模块技术演进与核心优势解析
  • RT-Thread实战:DS18B20软件包时序调试与硬件适配指南
  • 掌握Open3D变换矩阵:从零开始学习3D空间变换的核心技术
  • 在MFC程序中显示JPG/GIF图像:基于IPicture接口的封装与实践
  • FanControl完全指南:5分钟告别电脑风扇噪音,实现智能静音控制
  • 手把手教你理解5G NR频段配置:从N1到N99,用FrequencyCalculator拆解信道与频点映射关系
  • Windows Cleaner技术解析:4步构建系统级磁盘优化解决方案
  • OR-Tools在电信业中的应用:基站选址与频率分配优化终极指南
  • 远程工作文档协作终极指南:gh_mirrors/re/remote-working工具完全解析
  • 抖音无水印视频下载神器:douyin-downloader全功能深度解析
  • 桌面级FDM 3D打印机选购指南:从核心原理到机型对比
  • 路边值得吃的老店外卖有哪些?上美团搜本地必点榜一口吃到经典老味道 - 资讯焦点
  • 别再乱刷TWRP了!小米/一加新机型(Android 10+)刷Recovery前必看的分区避坑指南
  • 高效网盘直链解析工具:LinkSwift 智能下载助手深度解析
  • Open3D代码覆盖率终极指南:提升3D数据处理库测试完整性的完整教程 [特殊字符]
  • CircuitPython网络编程实战:从Wi-Fi连接到IPv6与JSON解析
  • 想吃低热量外卖怎么选?上美团搜本地必点榜精准避雷不踩坑 - 资讯焦点
  • CircuitPython嵌入式开发入门:从社区参与到硬件编程实战
  • 别只盯着CVE-2021-23017!用Nginx resolver指令前,你必须知道的3个安全配置要点
  • 2026铜钱珠手链哪个口碑好:问菩文创万众优选 - 17322238651
  • 终极SolidityPy课程完整指南:从零构建区块链游戏与智能合约的完整教程 [特殊字符]
  • 2026招财开运手串哪个好:问菩文创开运佳品 - 13425704091
  • Open3D大数据处理:海量3D数据的终极完整指南 [特殊字符]
  • 避坑指南:香橙派串口开发中orangepiEnv.txt与armbianEnv.txt的配置差异详解
  • 三步解锁九大网盘高速下载:LinkSwift终极直链解析教程
  • Verdi高效调试实战:从波形解析到问题定位的进阶指南
  • 高频测试适配器设计与应用全解析
  • CircuitPython硬件接口单例模式与库管理实战指南