Codeforces Round 951 (Div. 2) F. Kostyanych‘s Theorem(思维题 交互好题)

题目

交互题,n(n<=1e5)个点的完全图,无向的,初始恰好删了n-2条边

每次询问可以输入一个d:? d

交互器会输出一个当前度>=d的点v,

如果有多个这样的点,输出度最小的,如果还有多个,输出点号最小的

还会输出一个和这个点v当前没有连边的点x,如果x有多个,也输出点号最小的x

如果x不存在,输出x=0

然后交互器会把v这个点和当前连的所有边都删了,

如果没有找到这样的v,交互器输出0 0

最多n次询问后,你需要在「原图」中找到一条哈密顿路径(即一条路径恰访问每个点一次)

按顺序输出哈密顿路径

思路来源

Starsilk Cerulean 稲葉廻

题解

首先要想到问n-2,

问小于n-2肯定是不行的,这样你移除一个点,再也得不到它的信息

但是你只知道它和其中一个点不连接,不知道它另一个不连接的是谁,这样会缺信息

而一直问n-1显然肯定不行,这样会导致剩下的删边越来越多,最后剩下一堆小于n-2的

所以说就问n-2,根据交互器返回的第二维是不是0,

判断当前是n-2还是n-1,n-2时还能知道唯一不连接的是哪个

递归,数学归纳法思想,让剩下来的n个点的图还满足最多去掉n-2条边这个条件

1. 如果问出来的是n-2,显然删掉这个点的子图还满足这个条件,递归子图

2. 如果问出来的是n-1,n-1可以和子图内的点任意连,插入到任何地方,

再选取一个度数最小的点,去掉这两个点后又可以继续递归子图

也就是说,要么一次用到一条删边机会,要么两次用到>=两条删边机会,

使得剩下的x个点图余下的被删掉边的条数<=x-2
 

严格边数证明可以参考cf,这里可以感性理解一下图的密度(边平均度)

证明完边数之后,就是维护一个双端队列,

1. 不超过2个点,又没有边,直接放即可

2. n-2个点的,只有一条边不能连,判断一下不能和队首连就放到队尾,反之亦然

3. n-1个点的充当媒介,连接当前队尾和当前度最小的点

代码

#include<bits/stdc++.h>
using namespace std;
#define rep(i,a,b) for(int i=(a);i<=(b);++i)
#define per(i,a,b) for(int i=(a);i>=(b);--i)
typedef long long ll;
typedef double db;
typedef pair<int,int> P;
#define fi first
#define se second
#define pb push_back
#define dbg(x) cerr<<(#x)<<":"<<x<<" ";
#define dbg2(x) cerr<<(#x)<<":"<<x<<endl;
#define SZ(a) (int)(a.size())
#define sci(a) scanf("%d",&(a))
#define pt(a) printf("%d",a);
#define pte(a) printf("%d\n",a)
#define ptlle(a) printf("%lld\n",a)
#define debug(...) fprintf(stderr, __VA_ARGS__)
using namespace std;
typedef long long ll;
deque<int>q;
int t,n;
P ask(int d){
    printf("? %d\n",d);
    fflush(stdout);
    int x,y;
    scanf("%d %d",&x,&y);
    return P(x,y);
}
void sol(int n){
    if(n<=2){
        rep(i,1,n){
            q.push_back(ask(0).fi);
        }
        return;
    }
    auto [x,y]=ask(n-2);
    // 要么一次用到一条删边机会,要么两次用到>=两条删边机会,保持图密度不降
    if(y){
        sol(n-1);
        if(q.front()==y)q.push_back(x);
        else q.push_front(x);
    }
    else{
        auto [y,z]=ask(0);
        sol(n-2);
        q.push_back(x);//x都能连
        q.push_back(y);
    }
}
void out(){
    printf("!");
    while(!q.empty()){
        int x=q.front();
        q.pop_front();
        printf(" %d",x);
    }
    printf("\n");
    fflush(stdout);
}
int main(){
    sci(t);
    while(t--){
        sci(n);
        q.clear();
        sol(n);
        out();
    }
	return 0;
}

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

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

esp8266阿里云上线(小程序控制)

此wechatproject已上传在页面最上方 由图可见&#xff0c;项目只有两个页面&#xff0c;一个是获取该产品下的设备信息列表&#xff0c;一个是某设备对应的详情控制页面&#xff0c;由于这个项目只利用esp8266板子上自带的led&#xff0c;功能简单&#xff0c;只需要控制开关即…

传统产品经理AI产品经理

前言 随着科技的发展&#xff0c;技术的革新&#xff0c;AI技术当今已经渗入到各个行业里边&#xff0c;身处其中的产品经理也面临的新的挑战和机遇&#xff0c;下面是笔者整理分享的关于传统的产品经理如何顺应时代发展&#xff0c;成功转换成AI产品经理的相关内容&#xff0…

完美落地的自动化测试框架(pytest):智能生成?业务依赖?动态替换?报告构建?你来,这儿有!

前言 随着软件测试行业的快速发展&#xff0c;去测试化、全员测开化的趋势&#xff0c;技术测试已成为确保软件质量不可或缺的一环。 但对于许多没有代码基础或缺乏系统性自动化知识的测试人员来说&#xff0c;如何入手并实现高质量的自动化测试成为了一个挑战。 为此&#xff…

Android音频进阶之1.0到14.0音频焦点变化(七十六)

简介: CSDN博客专家,专注Android/Linux系统,分享多mic语音方案、音视频、编解码等技术,与大家一起成长! 优质专栏:Audio工程师进阶系列【原创干货持续更新中……】🚀 优质专栏:多媒体系统工程师系列【原创干货持续更新中……】🚀 优质视频课程:AAOS车载系统+AOSP…

虚拟机与windows文件同步

如果上图中不能设置&#xff0c;则在虚拟机mnt文件夹执行以下命令&#xff1a;

爬取基金收盘价并用pyecharts进行展现

爬取基金收盘价并用pyecharts进行展现 一、用到的第三方包 因为使用到了一些第三方的包&#xff0c;包还是比较大的如果直接从社区下载比较费劲&#xff0c;所以建议配置国内镜像源&#xff0c;这里以清华的镜像源为例。 pip config set global.index-url https://pypi.tuna…

OpenShift 4 - OpenShift Service Mesh 3 预览

《OpenShift / RHEL / DevSecOps 汇总目录》 了解 OpenShift Service Mesh 3 的变化 OpenShift Service Mesh 是一套在 OpenShift 上安装部署、跟踪监控 Istio 运行环境的实现。红帽在 2023 年底推出了技术预览版的 OpenShift Service Mesh 3&#xff0c;它和目前的 OpenShif…

谷粒商城实战(033 业务-秒杀功能4-高并发问题解决方案sentinel 1)

Java项目《谷粒商城》架构师级Java项目实战&#xff0c;对标阿里P6-P7&#xff0c;全网最强 总时长 104:45:00 共408P 此文章包含第326p-第p331的内容 关注的问题 sentinel&#xff08;哨兵&#xff09; sentinel来实现熔断、降级、限流等操作 腾讯开源的tendis&#xff0c…

打造精美电子画册,提升企业形象的方法

在当今数字化时代&#xff0c;企业形象的表达方式正在发生深刻变革。精美电子画册作为一种新兴的传播媒介&#xff0c;不仅能够展现企业风采、提升品牌价值&#xff0c;还能够吸引潜在客户、增强市场竞争力。 接下来告诉大家一些简单的制作方法&#xff0c;可以收藏起来哦 1.首…

HQL面试题练习 —— 累加刚好超过各省GDP40%的地市名称

目录 1 题目2 建表语句3 题解 1 题目 现有各省地级市的gdp数据&#xff0c;求从高到底累加刚好超过各省GDP40%的地市名称&#xff0c;临界地市也需要。例如&#xff1a; 浙江省的杭州24% 宁波 20% ,杭州宁波44% 大于40% 取出杭州、宁波 江苏省的苏州19% 南京 14% 无锡 12%&am…

Qt设置进程环境变量

目的 最近遇上了设置环境变量的问题,看似是小问题,想解决好,实在是一件不容易的事。 看看当时,我遇到这些问题的无奈: 首先说,是在windows进行环境变量的设置,如果在Linux那肯定是简单了。 一般来说,首先是设置系统的环境变量,这条路,是一条复杂的路,首先得写一个…

Centos7安装Zookeeper

Centos7安装Zookeeper 准备工作 https://zookeeper.apache.org/releases.html 下载稳定版的安装包。【注意&#xff1a;下载的是xxx-bin.tar.gz包 是可运行的zookeeper 而 xxx.tar.gz是源码包不可运行】 上传zookeeper的压缩包到指定目录/usr/local/zookeeper/ 安装Zookeepe…

重庆工商大学社会工作专业试题及答案,分享几个实用搜题和学习工具 #媒体#学习方法#知识分享

搜题软件一般都是通过识别题目内容搜索出问题的答案&#xff0c;当识别内容不正确或搜索不到答案时&#xff0c;又得重新到其他软件进行重复的操作&#xff0c;很是麻烦。所以我们可以使用专业的识别工具&#xff0c;对题目内容进行识别&#xff0c;然后把提取出来的内容单独保…

AI绘画教程分享:Stable Diffusion使用指南,12000+AI关键词大合集

01 首先下载好SD的安装包&#xff08;百度、B站、小红书等都可以找到资源&#xff09;&#xff0c;用启动器开始运行 02 从这里下载别人的模型套用&#xff0c;可以多多探索一下&#xff01;以下是各个模型的具体介绍&#xff1a; 03 这就是我们打开的初始界面&#xff0c;常…

如何给 MySQL 表和列授予权限?(官方版)

目录 授予表级别权限 授予列级别权限 如何给MySQL表和列授予权限是MySQL数据操作中非常重要的步骤&#xff0c;也是企业级使用MySQL数据库的起步点&#xff0c;以下分别参照官方教程整理的MySQL数据库的权限操作。 以下的语句可以直接使用MySQL的命令行进行操作&#xff08;如何…

问题:西周后期形成了能够传布四方、留存后世的兵书——著述年代最早的兵书——( )和( ). #媒体#知识分享

问题&#xff1a;西周后期形成了能够传布四方、留存后世的兵书——著述年代最早的兵书——( )和( ). A、《军志》 B、《军事》 C、《军政》 D、《孙子兵法》 参考答案如图所示

党史馆3d网上展馆

在数字化浪潮的推动下&#xff0c;华锐视点运用实时互动三维引擎技术&#xff0c;为用户带来前所未有的场景搭建体验。那就是领先于同行业的线上三维云展编辑平台搭建编辑器&#xff0c;具有零基础、低门槛、低成本等特点&#xff0c;让您轻松在数字化世界中搭建真实世界的仿真…

MTK联发科MT6897(天玑8300)5G智能移动处理器规格参数

天玑 8300 采用台积电第二代 4nm 制程&#xff0c;基于 Armv9 CPU 架构&#xff0c;八核 CPU 包含 4 个 Cortex-A715 性能核心和 4 个 Cortex-A510 能效核心&#xff0c;CPU 峰值性能较上一代提升 20%&#xff0c;功耗节省 30%。 此外&#xff0c;天玑 8300 搭载 6 核 GPU Mal…

Chrome 源码阅读:跟踪一个鼠标事件的流程

我们通过在关键节点打断点的方式&#xff0c;去分析一个鼠标事件的流程。 我们知道chromium是多进程模型&#xff0c;那么&#xff0c;我们可以推测&#xff1a;一个鼠标消息先从主进程产生&#xff0c;再通过跨进程通信发送给渲染进程&#xff0c;渲染进程再发送给WebFrame&a…

vcruntime140.dll干嘛的?丢失了vcruntime140.dll要咋办?

vcruntime140.dll干嘛的&#xff1f;vcruntime140.dll就是一个dll文件&#xff0c;它对于很多程序都是有用的&#xff0c;如果没有了它&#xff0c;那么你的有些程序是打不开的&#xff01;所以当你丢失的时候&#xff0c;你就要想办法去修复vcruntime140.dll文件&#xff0c;假…