龙龙送外卖PTA

2023-11-06

龙龙是“饱了呀”外卖软件的注册骑手,负责送帕特小区的外卖。帕特小区的构造非常特别,都是双向道路且没有构成环 —— 你可以简单地认为小区的路构成了一棵树,根结点是外卖站,树上的结点就是要送餐的地址。

每到中午 12 点,帕特小区就进入了点餐高峰。一开始,只有一两个地方点外卖,龙龙简单就送好了;但随着大数据的分析,龙龙被派了更多的单子,也就送得越来越累……

看着一大堆订单,龙龙想知道,从外卖站出发,访问所有点了外卖的地方至少一次(这样才能把外卖送到)所需的最短路程的距离到底是多少?每次新增一个点外卖的地址,他就想估算一遍整体工作量,这样他就可以搞明白新增一个地址给他带来了多少负担。

输入格式:

输入第一行是两个数 N 和 M (2≤N≤1e5, 1≤M≤1e5),分别对应树上节点的个数(包括外卖站),以及新增的送餐地址的个数。

接下来首先是一行 N 个数,第 i 个数表示第 i 个点的双亲节点的编号。节点编号从 1 到 N,外卖站的双亲编号定义为 −1。

接下来有 M 行,每行给出一个新增的送餐地点的编号 Xi​。保证送餐地点中不会有外卖站,但地点有可能会重复。

为了方便计算,我们可以假设龙龙一开始一个地址的外卖都不用送,两个相邻的地点之间的路径长度统一设为 1,且从外卖站出发可以访问到所有地点。

注意:所有送餐地址可以按任意顺序访问,且完成送餐后无需返回外卖站

输出格式:

对于每个新增的地点,在一行内输出题目需要求的最短路程的距离。

输入样例:

7 4
-1 1 1 1 2 2 3
5
6
2
4

输出样例:

2
4
4
6

解析:

        首先dfs出每个结点到根节点的距离,假设最后要返回根节点,则所有经过的路径都会经过两次。所以要求最短路径,我们只需要最后访问最远的结点即可,这样可以省下最长的一段路径。

        所以每次新添加的结点,回溯到其到根节点的路径上的距离其最近的并且已经走过的点,加上这段距离差,然后维护最大值,输出总距离的两倍减去当前维护的最长距离即可。

代码:

 

#include<bits/stdc++.h>
using namespace std;
const int N=1e5+5;
int n,m,t,a[N],maxx,dis[N],sum,k,vis[N],s;
vector<int>e[N];
void dfs(int x,int d){
	dis[x]=d;
	for(int i=0;i<e[x].size();i++) dfs(e[x][i],d+1);
}
int main(){
	cin>>n>>m;
	for(int i=1;i<=n;i++){
		scanf("%d",&a[i]);
		if(a[i]==-1) s=i;
		else e[a[i]].push_back(i);
	}
	dfs(s,0),vis[s]=1;
	for(int i=0;i<m;i++){
		scanf("%d",&t),k=t;
		while(!vis[k]) vis[k]=1,k=a[k];
		maxx=max(maxx,dis[t]);
		sum+=dis[t]-dis[k];
		printf("%d\n",sum*2-maxx);
	}
	return 0;
} 

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

龙龙送外卖PTA 的相关文章

  • 元组在 VS2012 中如何工作?

    Visual Studio 2012 功能 tuples但不是可变参数模板 这是如何完成的 如何在不使用可变模板的情况下实现元组 简而言之 微软做了与之前在 NET 中实现类似元组的数据类型完全相同的事情 创建许多版本 每个版本都有固定数量
  • 叮当错误?命名空间模板类的朋友

    以下代码在 clang 下无法编译 但在 gcc 和 VS 下可以编译 template
  • 并行化斐波那契序列生成器

    我正在学习并行化 在一项练习中 我得到了一些我应该提高性能的算法 其中之一是斐波那契数列生成器 array 0 0 array 1 1 for q 2 q lt MAX q array q array q 1 array q 2 我怀疑 这
  • MFC CList 支持复制分配吗?

    我在 MSVC 中查找了 CList 定义afxtempl h http www cppdoc com example mfc classdoc MFC AFXTEMPL H html并记录在MSDN http msdn microsoft
  • 异常堆栈跟踪不显示抛出异常的位置

    通常 当我抛出异常 捕获它并打印出堆栈跟踪时 我会看到抛出异常的调用 导致该异常的调用 导致该异常的调用that 依此类推回到整个程序的根 现在它只向我显示异常所在的调用caught 而不是它所在的地方thrown 我不明白是什么改变导致了
  • 在 ASP.NET MVC 中将模型从视图传递到控制器

    我正在 ASP NET MVC 中开发我的第一个应用程序 但遇到了一个我无法解决的问题 即使在阅读了整个互联网之后也是如此 因此 我有几个使用视图模型创建的视图 它们是报告 这些视图模型是根据用户选择标准填充的 我正在尝试构建一种接受模型并
  • C 中“complex”的默认类型

    根据我读过的文档 C99 和更高版本的支持float complex double complex and long double complex作为复杂类型 但是 此代码在使用时编译时不会发出警告gcc Wall Wextra inclu
  • C# 编译器数字文字

    有谁知道 C 编译器数字文字修饰符的完整列表 默认情况下 声明 0 使其成为 Int32 声明 0 0 使其成为 Double 我可以在末尾使用文字修饰符 f 来确保某些内容被视为 Single 例如像这样 var x 0 x is Int
  • 在 C# 中何时使用 ArrayList 而不是 array[]?

    我经常使用一个ArrayList而不是 正常 array 当我使用时 我感觉好像我在作弊 或懒惰 ArrayList 什么时候可以使用ArrayList在数组上 数组是强类型的 并且可以很好地用作参数 如果您知道集合的长度并且它是固定的 则
  • Xamarin - SignalR 挂在连接上

    我正在尝试将我的 Xamarin 应用程序连接到托管在 Azure 上的 SignalR 后端 我遇到的问题是每次我在 HubConnection 上调用 StartAsync 时 它都会挂起客户端并且请求永远不会完成 我尝试通过应用程序进
  • 无法为 wsdl 文件创建服务引用

    I have wsdl文件和xsd我本地机器上的文件 我想在项目中添加服务引用 我没有网络服务 我只有wsdl file 我收到以下错误 The document was understood but it could not be pro
  • 使用 OleDbCommandBuilder 时访问 SQL 语法错误

    我要在 C 中使用 OleDbDataAdapter 在 Access 数据库中插入数据 但收到错误消息INSERT INTO 命令中的语法错误 BackgroundWorker worker new BackgroundWorker Ol
  • 为什么 f(i = -1, i = -1) 是未定义的行为?

    我正在读关于违反评估顺序 http en cppreference com w cpp language eval order 他们举了一个令我困惑的例子 1 如果标量对象上的副作用相对于同一标量对象上的另一个副作用是无序的 则行为未定义
  • 无法在 C# 中为 EventArgs 分配使用派生类型的事件处理程序

    所以我有一个事件声明如下 public event EventHandler OnChangeDetected 然后我有以下处理程序被分配给该事件 myObject OnChangeDetected OnTableChanged 我的理解是
  • 从 NumPy 数组到 Mat 的 C++ 转换 (OpenCV)

    我正在围绕 ArUco 增强现实库 基于 OpenCV 编写一个薄包装器 我试图构建的界面非常简单 Python 将图像传递给 C 代码 C 代码检测标记并将其位置和其他信息作为字典元组返回给 Python 但是 我不知道如何在 Pytho
  • 在哪里可以下载没有 Visual Studio 2010 的 C# 4.0 编译器?

    我知道 CTP VS 2010 映像 但我可以只下载 NET Framework 4 0 和 C 编译器吗 AFAIK VS 2010 CTP 仅作为 VM 映像提供 我不相信 Microsoft 发布了 VS 的安装程序 其中一个绝对不适
  • C 语言中的 Alpha 混合 2 RGBA 颜色[重复]

    这个问题在这里已经有答案了 可能的重复 如何快速进行阿尔法混合 https stackoverflow com questions 1102692 how to do alpha blend fast 对 2 个 RGBA 整数 颜色进行
  • printf或iostream如何指定点后的最大位数

    字符串采用什么格式printf or iomanip我应该使用 iostream 中的运算符以以下格式打印浮点数 125 0 gt 125 125 1 gt 125 1 125 12312 gt 125 12 1 12345 gt 1 12
  • 将 char 绑定到枚举类型

    我有一段与此非常相似的代码 class someclass public enum Section START MID END vector section Full void ex for int i 0 i section
  • 使用 C# 动态创建按钮并按预定义的顺序放置它们

    NET 4 5 C 创建 Windows 窗体 我想动态创建和添加按钮并为其分配单击事件 但希望它们以特定的方式动态放置 就像图像一样 我的问题是如何以上述方式动态放置按钮 即 4x4 格式 一行 4 个按钮 4 列 但行数不受限制 是否可

随机推荐

  • 自定义mvc原理和框架实现

    目录 1 什么是MVC 2 自定义MVC工作原理图 3 自定义mvc的简单实现 1 中央控制器 2 Action接口定义 3 实现子控制器 4 完善中央控制器 1 请求分发功能 2 使用配置文件配置action 3 请求参数处理 4 完善A
  • vector中emplace_back和push_back详解,源码解读

    C 11之前 通常使用push back 向容器中加入一个右值元素 临时对象 的时候 首先会调用构造函数构造这个临时对象 然后需要调用拷贝构造函数将这个临时对象放入容器中 原来的临时变量释放 这样造成的问题是临时变量申请的资源就浪费 C 1
  • 关系型数据库与非关系型数据库Nosql区别汇总

    目录 关系型数据库与非关系型数据库详细比较 关系型数据库与非关系型数据库优缺点对比 关于Nosql 1 Nosql 2 Nosql特点 3 Nosql主要主流产品 4 Nosql数据库四大分类 关系型数据库与非关系型数据库详细比较 1 关系
  • MATLAB 在向量后面加一个元素

    1 向量后面加元素 gt gt x 1 2 3 4 5 gt gt y 6 gt gt x x y x 1 2 3 4 5 62 构建矩阵
  • OpenLayers的点击事件

    OpenLayers的点击事件是附加在整个ol Map对象上的 var selectSingleClick new ol interaction Select map addInteraction selectSingleClick sel
  • JavaWeb技术之多表操作

    目录 1 多表关系 2 多表操作之一对多 2 1 数据表 2 2 创建实体类 2 3 建立两表之间的属性关系 2 4 创建Dao层接口代码和实现类 操作数据库 2 5 测试类 3 多表操作之多对一 3 1 在上一步的基础上 完成多对一 3
  • GNU MCU Eclipse (STM32调试) win7配置

    eclipse官方有开源项目对STM32开发支持较好 由于Eclipse更新较快 插件配置较麻烦 建议使用开源项目 打包下载后直接使用 前提是已安装好JDK 安装好的界面如下 ST LINK配置好调试界面如下 测试工程结构如下 设备安装包如
  • C++程序习题-将字符串按逆序输出[1.15]

    输入一个字符串 把其中的字符按逆序输出 如输入LIGHT 输出为THGIL 要求用string方法 include
  • 网站顶部添加滚动文字

    如果我们在自己网站上添加一段滚动的文字会显得更高级一些 下面就看我如何实现的吧 实现效果 具体看本站 实现代码 精心整理 1 来回滚动
  • 利用 SOAR 加快事件响应并加强网络安全

    随着攻击面的扩大和攻击变得越来越复杂 与网络攻击者的斗争重担落在了安全运营中心 SOC 身上 SOC 可以通过利用安全编排 自动化和响应 SOAR 平台来加强组织的安全态势 这一系列兼容的以安全为中心的软件可加快事件调查和响应速度 SOAR
  • 股指期货日内平仓手续费高,锁仓可以解决吗

    对于平今加收的品种 以股指为例 如何解决日内手续费过高的问题 解决方案如下 逻辑讲解 现阶段股指手续费 张三交易IF合约 如果是日内开仓 日内平仓的话 根据交易所的交易规则 则张三开仓扣除25元手续费 日内平仓的还需扣除378元手续费 总计
  • [计算机组成原理] 以低字节地址为字地址

    以低字节地址为字地址 就是小端存储模式 数据低位 或者说低字节 存储在内存低地址 以高字节地址为字地址 就是大端存储模式 数据低位 或者说高字节 存储在内存高地址 现在看一个例题 这个题目有一个需要明确的地方 什么是第一 第二 第三字节 对
  • WPF 实现多语言

    1 编写Chinese xml English xml文件 2 在项目的App xml文件中
  • laravel —— 神奇的服务容器

    容器 字面上理解就是装东西的东西 常见的变量 对象属性等都可以算是容器 一个容器能够装什么 全部取决于你对该容器的定义 当然 有这样一种容器 它存放的不是文本 数值 而是对象 对象的描述 类 接口 或者是提供对象的回调 通过这种容器 我们得
  • qt相关的demo集合

    自己写过的qt c 相关程序的demo集合 许多学习自网络中 很感谢大家的分享 源码地址 Qt与学习通页面 记录与Qt相关的代码 Gitee com 源码目录 echart简单应用 opencv图像处理 QSetting简单使用 QtAv播
  • 运维思考:Java进程管理规范

    需求 无论是在spring boot 还是spring cloud 项目中 随着应用的不断增多 JVM参数的统一管理的重要性就会凸显出来 否则你可能会遇到几个问题 Java进程出现性能问题 无GC日志支撑提供重要信息 OOM异常频发 无法通
  • JDK下载 JVM调优工具jvisualvm下载

    一 JDK JDK官网地址 二 visualvm visualvm官网 JDK8以及之前自带有有visualvm插件 JDK9以及之后就不自带 1 下载安装 官网下载解压后 在解压目录 etc visualvm conf设置JDK所在路径
  • 收藏

    点上方计算机视觉联盟获取更多干货 仅作学术分享 不代表本公众号立场 侵权联系删除 转载于 作者丨叶润源 来源丨https www yuque com yerunyuan ar9831 tsm0id Kfi4w 编辑丨极市平台 985人工智能
  • 【满分】【华为OD机试真题2023 JS】字符串解密

    华为OD机试真题 2023年度机试题库全覆盖 刷题指南点这里 字符串解密 知识点数组字符串排序 时间限制 1s 空间限制 256MB 限定语言 不限 题目描述 给定两个字符串string1和string2 string1是一个被加扰的字符串
  • 龙龙送外卖PTA

    龙龙是 饱了呀 外卖软件的注册骑手 负责送帕特小区的外卖 帕特小区的构造非常特别 都是双向道路且没有构成环 你可以简单地认为小区的路构成了一棵树 根结点是外卖站 树上的结点就是要送餐的地址 每到中午 12 点 帕特小区就进入了点餐高峰 一开