Educational Codeforces Round 97 (Rated for Div. 2) D. Minimal Height Tree

news2024/11/18 13:35:00

 Problem - D - Codeforces

翻译:

Monocarp有一棵树,它由𝑛个顶点组成,并以顶点1为根。他决定研究BFS(宽度优先搜索),所以他在他的树上运行BFS,从根开始。BFS可以用下面的伪代码描述:

A =[] #处理顶点的顺序
q = Queue()
Q.put(1) #将根放在队列的末尾
而不是q.empty():
K = q.pop() #从队列中检索第一个顶点
A.append (k) #将k追加到访问顶点序列的末尾
对于y ing [k]: # g[k]是顶点k的所有子节点的列表,按升序排序
q.put (y)
Monocarp对BFS非常着迷,以至于最后失去了他的树。幸运的是,他仍然有一个顶点序列,其中BFS算法访问了顺序顶点(伪代码中的数组a)。Monocarp知道每个顶点只被访问过一次(因为它们只被从队列中取出一次)。此外,他知道每个顶点的所有子结点都是按升序查看的。

Monocarp知道有很多树(在一般情况下)具有相同的访问顺序𝑎,所以他不希望恢复他的树。单果树适用于任何高度最小的树。

树的高度是树顶点的最大深度,顶点的深度是从根结点到顶点的路径中的边数。例如,顶点1的深度是0,因为它是根结点,所有根结点的子结点的深度都是1。

帮助Monocarp找到任何给定访问顺序𝑎和最小高度的树。

输入
第一行包含一个整数𝑡(1≤𝑡≤1000)——测试用例的数量。

每个测试用例的第一行包含一个整数𝑛(2≤𝑛≤2⋅105)——树中的顶点数。

每个测试用例的第二行包含𝑛整数𝑎1𝑎2,…,𝑎𝑛(1≤𝑎𝑖≤𝑛;𝑎𝑖≠𝑎𝑗;𝑎1=1)- BFS算法访问顶点的顺序。

可以保证𝑛除以测试用例的总和不超过2⋅105。

输出
对于每个测试用例,以给定的访问顺序𝑎打印树的最小可能高度。

例子
inputCopy
3.
4
1 4 3 2
2
1 2
3.
1 2 3
outputCopy
3.
1
1
请注意
在第一个测试用例中,只有一棵树具有给定的访问顺序:


在第二个测试用例中,给定的访问顺序也只有一棵树:


在第三个测试用例中,给定访问顺序的最优树如下所示:

思路:求树的最小高度,按给定访问顺序。如果是按着递增来,我们就可以给它分叉,如果逆序就不得不再开一层。可以手动画图模拟一下,就会很清晰。我们来模拟这个过程,等到每个分叉都开展完,再进行下一层。看代码可能清晰一些。

代码:

/*Looking! The blitz loop this planet to search way
 
 Only my RAILGUN can shoot it 今すぐ
 
 身体中を  光の速さで
 
 駆け巡った確かな予感
 
 掴め! 望むものなら残さず
 
 輝ける自分らしさで
 
 信じてるよ  あの日の誓いを
 
 この瞳に光る涙それさえも  強さになるから
 
 */
#include <iostream>
#include <algorithm>
#include <string.h>
#include <string>
#include <math.h>
#include <stdio.h>
#include<vector>
#include<queue>
#include<map>
#include<set>
#include<tuple>
#include<numeric>
#include<stack>
using namespace::std;
typedef long long  ll;
int n,t;
inline __int128 read(){
    __int128 x = 0, f = 1;
    char ch = getchar();
    while(ch < '0' || ch > '9'){
        if(ch == '-')
            f = -1;
        ch = getchar();
    }
    while(ch >= '0' && ch <= '9'){
        x = x * 10 + ch - '0';
        ch = getchar();
    }
    return x * f;
}
inline void print(__int128 x){
    if(x < 0){
        putchar('-');
        x = -x;
    }
    if(x > 9)
        print(x / 10);
    putchar(x % 10 + '0');
}

int ap[200005];
int lllld=1;
void wanyurukong(){
    cin>>n;
    for (int i=1 ; i<=n; i++) {
        cin>>ap[i];
    }
    int ans=1;
    int ff=0;
    int fc=0;
    int las=1;
    for (int i =2; i<=n; i++) {
        if (ap[i]>ap[i-1]) {
            fc++;
        }
        else{
            ff++;
            if (ff==las) {
                las=fc;
                ans++;
                ff=0;
            }
//            printf("%d  %d %d\n",i,ans,las);
        }
    }
//    printf(" %d  %d\n",lllld,ans);
    printf("%d\n",ans);
  
}
int main(){
    ios::sync_with_stdio(false);
    cin.tie(); cout.tie();
    cin>>t;
    while (t--) {
        wanyurukong();
    }
    //wanyurukong
    return 0;
}
 

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

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

相关文章

欧几里得空间

文章目录1 欧几里得范数2 距离3 标准内积4 柯西-施瓦茨不等式5 正交6 叉乘7 平行四边形法则8 欧几里得运动线性空间里最重要的就是欧几里得空间了&#xff0c;这是线性代数学习绕不过去的槛。欧几里得空间&#xff0c;学习起来我觉得吧&#xff0c;主要是三个点&#xff1a;内积…

Golang面试宝典——Go语言实现排序算法之快速排序

关于Golang面试宝典 最近几年&#xff0c;Go的热度持续飙升&#xff0c;国内外很多大公司都在大规模的使用Go。Google是Go语言诞生的地方&#xff0c;其他公司如Facebook、腾讯、阿里、字节跳动、百度、京东、小米等都在拥抱和转向Go。Go语言的开源项目也非常多&#xff0c;如…

无人驾驶(四)---远程桌面控制工具: NoMachine踩坑记录

NoMachine for mac是一款免费的远程桌面访问工具&#xff0c;这款软件的连接到远程桌面后延迟可以非常低&#xff0c;NX协议在高延迟低带宽的链路上提供了近乎本地速度的响应能力&#xff0c;打破空间和时间的障碍&#xff0c;让您的桌面环游世界。 1.环境配置 服务端&#x…

西门子PLC各类通信协议差异对比

西门子PLC有4大类&#xff0c;几十个型号类型&#xff0c;PLC不同所支持的通讯协议也不相同。 S7-200系列支持的协议有&#xff1a;PPI、MPI、PROFIBUS、以太网、S7协议、AS-INTERFACE、USS、MODBUS、自由口。 S7-300\400系列支持的协议有&#xff1a;MPI、PROFIBUS、ETHERNE…

陌陌综合案例

注&#xff1a;大家觉得博客好的话&#xff0c;别忘了点赞收藏呀&#xff0c;本人每周都会更新关于人工智能和大数据相关的内容&#xff0c;内容多为原创&#xff0c;Python Java Scala SQL 代码&#xff0c;CV NLP 推荐系统等&#xff0c;Spark Flink Kafka Hbase Hive Flume等…

【python3】10.python高阶内容:装饰器

10.python高阶内容&#xff1a;装饰器 2022.12.28 装饰器装饰器(Decorators)是 Python 的一个重要部分。简单地说&#xff1a;他们是修改其他函数的功能的函数。参数可以是函数&#xff0c;返回值也可以是函数。 10.1 形式 def decorator(fn):def wrapper(name):print(name&…

【Linux进程】进程的基本概念,fork的使用,各种状态的含义,孤儿和僵尸进程的含义

目录 1.进程的基本概念 2.描述进程-PCB 3.fork创建子进程 4.各种状态对应的含义及进程大概的运行原理 5.僵尸进程 ​6.孤儿进程 7.进程的优先级 1.进程的基本概念 2.描述进程-PCB PCB概念:进程信息被放在一个叫做进程控制块的数据结构中&#xff0c;可以理解为进程属性的集…

ChatGPT注册教程

ChatGPT是最近很火的AI智能对话聊天软件。我们是能够去用来进行更加自由的智能内容讨论和聊天。有的小伙伴还不知道怎么注册。 官方地址&#xff1a;chat.openai.com/chat 注册步骤 1、进入官网后&#xff0c;点击注册按钮。 2、点击创建账号。 3、输入自己的邮箱账号。 4、…

整合Kafka

Main Concepts 一些服务器形成了存储层&#xff0c;被称为broker&#xff0c;其他服务器运行kafka连接去不断地导入和导出数据作为事件流&#xff0c;将kafka和关系型数据库等存在的系统集成。 Servers: Kafka is run as a cluster of one or more servers that can span mult…

高手不用Redis内存数据库一

不是说Redis不好&#xff0c;不用Redis用别的(比如:Memcached 2、VoltDB 3、MongoDB 4、Hazelcast 5、Aerospike) No! No! No!!! Redis 很好&#xff0c;我不拦着您用…… 而是说&#xff0c;我们的水平更高了以后&#xff0c;您一定会感受到 内存数据库 不够用、不够灵活、不…

JavaScript基础篇2之日期时间函数

一、计算机中时间字母表示的预知识储备&#xff1a; G&#xff08;age&#xff0c;时代年龄等意思&#xff09;&#xff1a;时代标志&#xff0c;如AD&#xff08;Anno Domini公元&#xff09;、BC&#xff08;Before Christ公元前&#xff09;。 y&#xff08;year&#xff…

zabbix安装使用

1.1 Zabbix概述 Zabbix是一款能够监控各种网络参数以及服务器健康性和完整性的软件。Zabbix使用灵活的通知机制&#xff0c;允许用户为几乎任何事件配置基于邮件的告警。这样可以快速反馈服务器的问题。基于已存储的数据&#xff0c;Zabbix提供了出色的报告和数据可视化功能。…

基于python的turtle实现圣诞树的绘制

文章目录一、前言二、基于turtle实现绘制圣诞树三、效果展示四、实现步骤代码实现分步骤1. 导入库2. 配置圣诞树高度等信息3. 定义函数get_color()可获取随机颜色4. 定义函数snow() 绘制一朵雪花5. 定义函数name()可随机写一些文字6. 定义函数koc() 绘制星星7.定义函数tree()绘…

Qt中调用thrift

thrift是一个Apache公司开源的一款RPC&#xff08;Remote Procedure Call&#xff09;框架&#xff0c;让不同语言构建的服务可以做到远程调用无缝对接。 thrift库分两部分&#xff1a; libthrift - 核心库文件&#xff0c;需要依赖OpenSSL、boost libthriftnb - 包含thrift非阻…

内网穿透基本使用

内网穿透基本使用 文章目录内网穿透基本使用前言一、内网穿透二、工具1.FRP2.LCX3.NPS4.Sunny-Ngork三、Sunny-ngork使用四、Frp内网穿透代理1.一层代理2.二层代理总结前言 之前零零碎碎接触过不少关于内网渗透测试、内网穿透的知识&#xff0c;但是不得不说渗透测试很吃基础、…

初学Java web(十一)AjaxAxiosJSON

Ajax&Axios&JSON 概念:AJAX(Asynchronous JavaScript And XML):异步的JavaScript和XML AJAX作用:1.与服务器进行数据交换&#xff1a;通过AJAX可以给服务器发送请求&#xff0c;并获取服务器响应的数据 使用了AJAX和服务器进行通信&#xff0c;就可以使用HTMLAJAX来替…

ArcGIS基础实验操作100例--实验10绘制带空洞的面要素

本实验专栏来自于汤国安教授《地理信息系统基础实验操作100例》一书 实验平台&#xff1a;ArcGIS 10.6 实验数据&#xff1a;请访问实验1&#xff08;传送门&#xff09; 基础编辑篇--实验10 绘制带空洞的面要素 目录 一、实验背景 二、实验数据 三、实验步骤 方法一&…

【JavaScript】飞机大战简单网页版(源码下载)

文章目录一、效果演示设计思路二、鼠标版飞机大战代码展示1.HTML结构代码2.CSS样式代码3.JavaScript代码js.js文件plane.js文件三、键盘版飞机大战代码展示1.HTML结构代码2.CSS样式代码3.JavaScript代码四、代码资源分享一、效果演示 利用html&#xff0c;css&#xff0c;js制…

qt QCustomplot 用QCPItemStraightLine画参考线,阈值线,水平线

想要在两个坐标系下都画上如下参考线(阈值线&#xff0c;或者 水平线)&#xff0c; 这个参考线随着坐标轴的拖拽能够一直显示 我们找到了QCPItemStraightLine&#xff0c;该类能够画一条无限延伸的直线&#xff0c;通过下面的代码能够实现在A坐标系画一条水平线&#xff0c;但不…

[CF-EDU]Segment Tree - part 1 - Step 1 - Practice

练习名称&#xff1a;ITMO Academy: pilot course Segment Tree 练习链接&#xff1a;Segment Tree, part 1, Step1, Practice cf官方的线段树专题练习 A. Segment Tree for the Sum 单点修改&#xff0c;区间和查询 #include <bits/stdc.h> #define lson (u <&l…