Codeforces Round 881 (Div. 3)F1题解

news2024/9/19 10:55:12

文章目录

  • [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.coloradmin.cn/o/835763.html

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

相关文章

专业商城财务一体化-线上商城+进销存管理软件,批发零售全行业免费更新

订货流程繁琐&#xff1f;订单处理效率低&#xff1f;小程序商城与进销存系统不打通&#xff1f;数据需要手动输入同步&#xff1f;财务与的结算对账需要大量手工处理&#xff1f;零售批发从业者&#xff0c;如何你也有以上烦恼&#xff0c;可以看看进销存小程序订货商城&#…

软件设计师(六)结构化开发方法

结构化方法由结构化分析、结构化设计、结构化程序设计构成&#xff0c;它是一种面向数据流的开发方法。 分类说明结构化分析&#xff08;SA&#xff09;根据分解与抽象的原则&#xff0c;按照系统中数据处理的流程&#xff0c;用数据流图来建立系统的功能模型&#xff0c;从而…

Java错误小全

文章目录 NullPointer异常&#xff1a; 错误描述&#xff1a;当试图访问一个空引用对象的属性或调用空引用对象的方法时&#xff0c;会抛出NullPointer异常。 复现示例&#xff1a; String str null; System.out.println(str.length());解决方案&#xff1a;在使用对象之前&am…

JVM之两种垃圾判断方式

文章目录 一、所谓的垃圾二、引用计数器法三、可达性分析法GC Roots工作原理三色标记标记算法并发标记 一、所谓的垃圾 垃圾&#xff1a;如果一个或多个对象没有任何的引用指向它了&#xff0c;那么这个对象现在就是垃圾 在堆里存放着几乎所有的 Java 对象实例&#xff0c;在…

linux环境下pip下载包的基础使用

内网环境如何使用pip安装包 1、能连接到外网的电脑先下载好对应的whl文件 使用命令&#xff1a; pip3 download pymysql -i http://mirrors.aliyun.com/pypi/simple/ --trusted-host mirrors.aliyun.com下载好的文件&#xff1a; 将whl文件上传到内网机器中进行安装 pip3 in…

SpringCloudAlibaba之Sentinel(一)流控篇

前言&#xff1a; 为什么使用Sentinel&#xff0c;这是一个高可用组件&#xff0c;为了使我们的微服务高可用而生 我们的服务会因为什么被打垮&#xff1f; 一&#xff0c;流量激增 缓存未预热&#xff0c;线程池被占满 &#xff0c;无法响应 二&#xff0c;被其他服务拖…

React Native元素旋转一定的角度

mMeArrowIcon: {fontSize: 30, color: #999, transform: [{rotate: 180deg}]},<Icon name"arrow" style{styles.mMeArrowIcon}></Icon>参考链接&#xff1a; https://reactnative.cn/docs/transforms https://chat.xutongbao.top/

uniapp自定义头部导航栏

有时我们需要一些特殊的头部导航栏页面&#xff0c;取消传统的导航栏&#xff0c;来增加页面的美观度。 下面我就教大家如何配置&#xff1a; 一、效果图 二、实现 首先在uniapp中打开pages.json配置文件&#xff0c;在单个路由配置style里面设置导航栏样式​​​​​​nav…

《HeadFirst设计模式(第二版)》第四章代码——工厂模式

代码文件目录结构&#xff1a; Cheese: 原料ingredient类中只以Cheese为例&#xff0c;不重复展示&#xff1a; package Chapter4_FactoryPattern.abstractFactoryPattern.Ingredient;/*** Author 竹心* Date 2023/8/4**/public abstract class Cheese {String name;String g…

国货香水,真“香”吗?

【潮汐商业评论/原创】 Judy在选择香水这块还属于入门级选手&#xff0c;“我只买过一次YSL的自由之水&#xff0c;其他都是生日时朋友送给我的。如果真让我选&#xff0c;说实话我还真不知道买啥。”Judy偷笑着说。 在电影《香水》中&#xff0c;有一句台词说到&#xff0c;…

走进人工智能|自主无人系统 从概念到现实的飞跃

前言&#xff1a; 自主无人系统是具备自主感知、决策和执行能力的智能系统&#xff0c;无需人类干预即可完成任务的技术体系。 文章目录 序言AUS的现有应用从概念到现实的飞跃技术发展历程 目前形式领跑人困难和挑战 总结 自主无人系统&#xff08;Autonomous Unmanned Systems…

Vue2 第十九节 Vuex(二)

1.Vuex API 补充内容 2.getters 配置项 3.四个Map方法的使用 4.多组件共享数据 5.Vux模块化和命名空间 一.Vuex API补充内容 ① 在actions中&#xff0c;如果一个函数处理不完&#xff0c;可以继续调dispatch处理 ② 开发者工具是跟mutations中的数据进行交互的&#xff…

About Multiple regression

ps:this article is not very strict,just some ml and mathematic basic knowledge.My english is poor too.So If this passage make you confuse and uncomfortable.Please give me a feedback in the comment :-D Prior to this(在此之前), we learned the concept of sin…

linuxARM裸机学习笔记(2)----汇编LED灯实验

MX6ULL 的 IO IO的复用功能 这里的只使用了低五位&#xff0c;用来配置io口&#xff0c;其中bit0~bit3(MUX_MODE)就是设置 GPIO1_IO00 的复用功能的&#xff0c;GPIO1_IO00 一共可以复用为 9种功能 IO&#xff0c;分别对应 ALT0~ALT8。每种对应了不同的功能 io的属性配置 HY…

优思学院|精益生产如何真正落地?你要掌握这4个P!

怎样才能让精益生产的方法落地&#xff1f;这是一个经常听到的问题&#xff0c;但对于这个问题很多人有不同的想法和答法&#xff0c;因为大家对“落地”一词有着不同的看法。 “落地”是指整个管理系统的重组&#xff0c;是企业把所学的管理知识和方法&#xff0c;在经营实践…

那些不想骑车的正常理由和十三不骑。

骑友们最热门&#xff0c;也是常常讨论的话题大多是如何骑自行车&#xff1f;但有时候&#xff0c;我们也会思考一些另类的问题。例如&#xff0c;那些不想骑车的理由。 首先&#xff0c;我们可以从科学角度来看待这个问题。骑车虽然有益于健康&#xff0c;但是骑车的姿势也会对…

用msys2安装verilator并用spinal进行仿真

一 参考 SpinalHDL 开发环境搭建一步到位(图文版) - 极术社区 - 连接开发者与智能计算生态 (aijishu.com)https://aijishu.com/a/1060000000255643Setup and installation of Verilator — SpinalHDL documentation

微信认证申请流程(政府/事业单位类型)

第一步&#xff1a;登录微信公众平台->设置->微信认证->开通 第二步&#xff1a;同意协议&#xff1a;签署《微信公众平台认证服务协议》 第三步&#xff1a;验证管理员 第四步&#xff1a;选择认证类型及填写认证资料 选择认证类型及上传申请公函 政府/事业单位资质…

沙箱逃逸复现

当this指向window 原理 1.this直接指向window&#xff0c;拿到window的tostring的constructor来利用构造函数拿到process 是对象且指向沙箱外部&#xff0c;才可以利用 const vm require(vm); const script const process this.toString.constructor(return process)() pr…

vs code 如何配置保存cpolar所建立公共互联网网页的隧道参数?

文章目录 &#x1f4cb; 前言1.如何配置保存cpolar所建立的隧道参数&#xff1f;2.本地安装 VS Code并修改隧道参数2.1 Visual studio Code 下载2.2 配置Visual studio Code 相关参数2.3 编辑 cpolar.yml 隧道参数文件2.3 修改website隧道参数 3. 检查 cpolar.yml 文件配置是否…