Codeforces Round 881 (Div. 3)F1题解

文章目录

  • [Omsk Metro (simple version)](https://codeforces.com/contest/1843/problem/F1)
    • 问题分析
      • 1.分析如何知道根节点到某个结点的区间内是否存在一个子段和为k
      • 2.方法1使用树形DP来动态维护每个节点到根节点的最大子段和和最小子段和
        • 代码

Omsk Metro (simple version)

在这里插入图片描述在这里插入图片描述

问题分析

给定一个树形结构的起始点,然后有q次操作,每次操作有两种,一种为向该树形结构已存在的点中添加结点,另一种为查询根节点到某个已存在结点中是否存在一个连续子段其和为k。每个结点的都有一个权值,权值为-1或者1。

1.分析如何知道根节点到某个结点的区间内是否存在一个子段和为k

假设该区间内存在一个子段其和为k,考虑该子段和相邻子段的关系,若将该子段进行扩展,由于每个结点权值为-1或者1,则每次扩展一个结点后比扩展前的和要多1或者少1,即值的增减是连续的。则对于整个区间而言存在一个子段和为k等价于,k属于该区间内最大子段和到最小子段和的范围内。

2.方法1使用树形DP来动态维护每个节点到根节点的最大子段和和最小子段和

由于新增节点后其子段和的最值只涉及其父节点,则可以采用树形DP来动态维护所需的值。对于一个节点,其状态定义有两个一个为 f 1 ( v ) f1(v) f1(v)表示1到v区间中的最大子段和,另一个位 f 2 ( v ) f2(v) f2(v)为表示1到v区间中的最小子段和。状态转移的方式有两类,一类为包括v点,一类为不包括v点, f ( v , 0 ) f(v,0) f(v,0)为不包括v点, f ( v , 1 ) f(v,1) f(v,1)为包括v点。

不包括v点的,可以由包含父节点的子段,不包含父节点的子段,以及都不包含3种状态转移而来。 f ( v , 0 ) = f(v,0)= f(v,0)={ f ( u , 0 ) , f ( u , 1 ) f(u,0),f(u,1) f(u,0),f(u,1),0}

包括v点的,可以由包含父节点的子段加上当前点的值,仅有当前点的值,2种状态转移而来。 f ( v , 1 ) = f(v,1)= f(v,1)={ f ( u , 1 ) + v a l , v a l f(u,1)+val,val f(u,1)+val,val}

代码

#include<bits/stdc++.h>#define x first
#define y second
using namespace std;
typedef unsigned long long ULL;
typedef long long LL;
typedef pair<int, int> PII;
typedef pair<LL, LL> PLL;
const int N = 2e5 + 10, M = N << 6, INF=0x3f3f3f3f;
int f1[N][2],f2[N][2];void solve() {int n;cin >>n;///由于每个结点只会在添加时通过其父节点更新,故只需初始化根节点即可f1[1][1]=1,f1[1][0]=0;f2[1][1]=1,f2[1][0]=0;char op[2];int idx=1;///节点编号for(int i=0;i<n;i++){scanf("%s",op);if(op[0]=='+'){int u,w;scanf("%d %d",&u,&w);++idx;f1[idx][0]=max({f1[u][0],f1[u][1],0});f1[idx][1]=max({f1[u][1]+w,w});f2[idx][0]=min({f2[u][0],f2[u][1],0});f2[idx][1]=min({f2[u][1]+w,w});}else {int u,v,k;scanf("%d %d %d",&u,&v,&k);int minval=min(f2[v][0],f2[v][1]);int maxval=max(f1[v][0],f1[v][1]);if(k>=minval&&k<=maxval)  puts("YES");else puts("NO");}}
}int main() {int t = 1;cin >> t;while (t--) solve();return 0;
}

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

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

相关文章

STM32使用HAL库中外设初始化MSP回调机制及中断回调机制详解

STM32使用HAL库之Msp回调函数 1.问题提出 在STM32的HAL库使用中&#xff0c;会发现库函数大都被设计成了一对&#xff1a; HAL_PPP/PPPP_Init HAL_PPP/PPPP_MspInit 而且HAL_PPP/PPPP_MspInit函数的defination前面还会有__weak关键字 上面的PPP/PPPP代表常见外设的名称为…

【css】使用float实现水平导航栏

该实例使用float 浮动实现元素浮动在水平方向&#xff0c;从而实现水平导航栏效果。 overflow: hidden&#xff1a;当不给父级元素设置高度的时候&#xff0c;其内部元素浮动后会导致下面的元素顶上去&#xff0c;这是因为子元素浮动后&#xff0c;子元素脱离标准流&#xff0…

组合总和——力扣39

文章目录 题目描述回溯 题目描述 回溯 class Solution { public:vector<vector<int>> res;vector<int> seq; void dfs(vector<int>& nums, int pos, int target){if(target0){res.emplace_back(seq);return;}if(posnums.size()){return;}//直接跳过…

Python源码编译时碰到的问题:fatal error LNK1104: cannot open file libffi-7.lib

因为工作原因需要对python源码进行调试&#xff0c;所以Github上拉下来的cpython源码&#xff0c;编译一切顺利&#xff0c;除了一个报告说 LNK1104&#xff1a;无法打开libffi-7.lib 因为这些externals库是通过&#xff1a;PCbuild\get_externals.bat下载下来的&#xff0c;…

Java实现十大经典排序算法之快速排序

0 算法简介 快速排序是一种高效率排序算法&#xff0c;它是对冒泡排序的一种改进&#xff0c;它也是一种不稳定排序算法。快速排序的核心是比较、交换和递归。 在待排序数组中指定一个基准元素pivot&#xff08;一般选取数组首元素&#xff09;&#xff0c;使得数组排序之后基…

uniapp 使用iconfont

问题描述&#xff1a;在开发过程中会遇到使用自定义icon的情况&#xff0c;在uniapp项目中使用iconfont步骤如下。 问题解决 步骤一&#xff1a; 打开iconfont网址------我的项目-----下载至本地 下载成功的文件内容&#xff1a; 步骤二&#xff1a; 以管理员身份运行终端&am…

Linux的基本指令(2)

指令1&#xff1a;man 作用&#xff1a;可以查询linux指令语法内容。 格式&#xff1a; man 指令 安装man指令&#xff1a; yum install -y man-pages 例如&#xff1a; 查询 指令 ls 的语法内容。 man ls 查询 fork 指令的语法内容。 man fork 在man中存在9个手册&…

华为OD面试记录

The experience of applying for software test engineer(Dispatcher) 记录保存 招聘岗位: 测试工程师 Base:西安 华为面试流程如下&#xff1a; 流程名内容机试三题,总分400分,最后一道题200分人力资源面试询问私人问题&#xff0c;不谈薪资一面技术面二面技术面主管问项目…

根据Pytorch源码实现的 ResNet18

一&#xff0c;类模块定义: import torch import torch.nn as nn import torch.nn.functional as F from torch import Tensorclass ResBlock(nn.Module):def __init__(self, inchannel, outchannel, stride1) -> None:super(ResBlock, self).__init__()# 这里定义了残差块…

CountDownLatch的使用(判断多个线程是否都执行完毕)

使用CountDownLatch的情景 有一些”多线程下载器"&#xff0c;可以把一个大的文件给拆分成多个小的部分&#xff0c;使用多个线程分别下载&#xff0c;每个线程负责下载一部分&#xff0c;此时每个线程都是一个网络连接&#xff0c;这样就可以大幅度提高下载速度。 假设&a…

Spring Boot使用的关键点

目录 1. 构建系统 1.1. 依赖管理 1.2. Maven Maven项目结构 1.3. Starter 2. 代码结构 2.1. “default” 包 2.2. 启动类的位置 3. Configuration 类 3.1. 导入额外的 Configuration 类 3.2. 导入 XML Configuration 4. 自动装配&#xff08;配置&#xff09; 4.1…

【云原生】深入掌握k8s中Pod和生命周期

个人主页&#xff1a;征服bug-CSDN博客 kubernetes专栏&#xff1a;kubernetes_征服bug的博客-CSDN博客 目录 1 什么是 Pod 2 Pod 基本操作 3 Pod 运行多个容器 4 Pod 的 Labels(标签) 5 Pod 的生命周期 1 什么是 Pod 摘取官网: Pod | Kubernetes 1.1 简介 Pod 是可以在 …

idea打开传统eclipse项目

打开传统web项目 1.打开后选择项目文件 2.选择项目结构 3.设置jdk版本 4.导入当前项目模块 5.选择eclipse 6. 设置保存目录 7.右键模块&#xff0c;添加spring和web文件 8. 设置web目录之类的&#xff0c;并且创建打包工具 9.如果有本地lib&#xff0c;添加为库 最后点击应用&…

Databend 开源周报第 104 期

Databend 是一款现代云数仓。专为弹性和高效设计&#xff0c;为您的大规模分析需求保驾护航。自由且开源。即刻体验云服务&#xff1a;https://app.databend.cn 。 Whats On In Databend 探索 Databend 本周新进展&#xff0c;遇到更贴近你心意的 Databend 。 从 Kafka 载入数…

安装win版本的neo4j(2023最新版本)

安装win版本的neo4j 写在最前面安装 win版本的neo4j1. 安装JDK2.下载配置环境变量&#xff08;也可选择直接点击快捷方式&#xff0c;就可以不用配环境了&#xff09;3. 启动neo4j 测试代码遇到的问题及解决&#xff08;每次环境都太离谱了&#xff0c;各种问题&#xff09;连接…

Java系列之数据库geometry的相关函数

文章目录 前言一、geometry是什么&#xff1f;二、geometry常用函数1.OGC标准函数①管理函数②几何对象关系函数③几何对象处理函数④几何对象存取函数⑤几何对象构造函数 2.PostGIS扩展函数①管理函数②几何操作符③几何量测函数④几何对象输出⑤几何对象创建⑥几何对象编辑⑦…

小研究 - 微服务系统服务依赖发现技术综述(二)

微服务架构得到了广泛的部署与应用, 提升了软件系统开发的效率, 降低了系统更新与维护的成本, 提高了系统的可扩展性. 但微服务变更频繁、异构融合等特点使得微服务故障频发、其故障传播快且影响大, 同时微服务间复杂的调用依赖关系或逻辑依赖关系又使得其故障难以被及时、准确…

AI算法图形化编程加持|OPT(奥普特)智能相机轻松适应各类检测任务

OPT&#xff08;奥普特&#xff09;基于SciVision视觉开发包&#xff0c;全新推出多功能一体化智能相机&#xff0c;采用图形化编程设计&#xff0c;操作简单、易用&#xff1b;不仅有上百种视觉检测算法加持&#xff0c;还支持深度学习功能&#xff0c;能轻松应对计数、定位、…

Spring mvc:SpringServletContainerInitializer

SpringServletContainerInitializer实现了Servlet3.0规范中定义的ServletContainerInitializer&#xff1a; public interface ServletContainerInitializer {void onStartup(Set<Class<?>> c, ServletContext ctx) throws ServletException; }SpringServletCont…

Android 获取网关 ip 和 DNS ip

参考下方 PingUtil.java 代码 import android.content.Context; import android.net.DhcpInfo; import android.net.wifi.WifiManager; import android.text.format.Formatter;import java.io.BufferedReader; import java.io.IOException; import java.io.InputStream; impor…