本题教训我们:

如果遇到在返回值域范围的dp时,可以考虑线段树合并操作。

考虑最开始写作一个\(if:0;end\)

那么所有的\(if\)可以记作一个树状结构,\(set\)为子节点

先把所有\(set\ s\)指令删除,代价提前至点上。

考虑在树上\(dp\),那么我们需要的是\(f_{i,j}\)即操作完 \(i\) 内的子程序后,返回值为 \(j\) 的最小代价。

那么可以线段树合并操作。

但是由于这个子节点之间的顺序有差别,所以这里可以采用顺序访问子节点而后map启发式合并。

复杂度较线段树合并为\(O(nlog^2n)\)多一个\(log\)。

下午再来补上程序。

机房的dev居然没法C++14.

#include<bits/stdc++.h>

#define N 200020
#define ll long long int n,ban,x[N],w[N],f[N];
ll d[N]; std::string opt[N]; std::vector<int>G[N];//树 std::map<int,ll>dp[N];//启发式合并map
std::multiset<ll>num[N];//处理最小值 inline void dfs(int u){
dp[u][x[u]] = 0;
num[u].insert(0);
for(int i = 0;i < G[u].size();++i){
int v = G[u][i];
if(opt[v][0] == 's'){
if(x[v] == ban)
d[u] += w[v];
else
if(dp[u].count(x[v])){
ll las = dp[u][x[v]];
dp[u][x[v]] = (*num[u].begin()) - w[v];
num[u].erase(num[u].find(las));
}else{
dp[u][x[v]] = (*num[u].begin()) - w[v];
}
num[u].insert(dp[u][x[v]]);
d[u] += w[v];
}
else{
if(dp[u].count(x[v])){//如果可能进入这个if
dfs(v);
ll tmp = d[v] + dp[u][x[v]];
if(dp[v].size() <= dp[u].size()){
for(auto [k,t] : dp[v]){
if(!dp[u].count(k))dp[u][k] = tmp + t;
else{
num[u].erase(num[u].find(dp[u][k]));
dp[u][k] = std::min(k == x[v] ? inf : dp[u][k],tmp + t);
}
num[u].insert(dp[u][k]);
}
}else{
d[u]+=tmp;
for(auto [k,t]:dp[u]){
if(!dp[v].count(k))dp[v][k]=t-tmp;
else{
num[v].erase(num[v].find(dp[v][k]));
if(k^x[v])dp[v][k]=min(dp[v][k],t-tmp);
}
num[v].insert(dp[v][k]);
}
std::swap(dp[u],dp[v]);
std::swap(num[u],num[v]);
}
}
}
}
} int main(){
scanf("%d%d",&n,&ban);
int u = 0;
for(Int i = 1;i <= n;++i){
std::cin>>opt[i];
if(opt[i][0] == 's'){
G[u].push_back(i);
scanf("%d%d",&x[i],&w[i]);
}else if(opt[i][0] == 'i'){
scanf("%d",&x[i]);
G[u].push_back(i);
f[i] = u;
u = i;
}else{
u = f[u];
}
}
dfs(0);
std::cout<<(d[0] + *num[0].begin())<<std::endl;
}

CF1455G Forbidden Value的更多相关文章

  1. 遇到 HTTP 错误 403.14 - Forbidden?

    打开 http://localhost:1609 报错: HTTP 错误 403.14 - Forbidden Web 服务器被配置为不列出此目录的内容 解决方案一:设置默认首页 在 Web.conf ...

  2. Forbidden You don't have permission to access / on this server PHP

    在新安装的谷歌游览器里,打不了PHP网站了,错误显示: Forbidden You don't have permission to access / on this server. 原因还是配置权限 ...

  3. Apache2.4部署django出现403 Forbidden错误解决办法

    前言:Apache2.4部署django出现403 Forbidden错误最好要结合apache中的错误日志来观察出现何种错误导致出现403错误 下午百度了一下午没找到解决办法,试了n种方法,简直坑爹 ...

  4. vs2015启动网站调试提示 HTTP 错误 403.14 - Forbidden Web 服务器被配置为不列出此目录的内容。 解决方法

    今天安装了vs2015 下载一个项目进行试用,启动调试的时候提示 HTTP 错误 403.14 - Forbidden Web 服务器被配置为不列出此目录的内容. 最可能的原因: 没有为请求的 URL ...

  5. [Linux] Nginx networking 403 Forbidden 静态文件不允许查看

    nginx 的 403 Forbidden errors 表示你在请求一个资源文件但是nginx不允许你查看. 403 Forbidden 只是一个HTTP状态码,像404,200一样不是技术上的错误 ...

  6. [转]权限问题导致Nginx 403 Forbidden错误的解决方法

    权限问题导致Nginx 403 Forbidden错误的解决方法 投稿:junjie 字体:[增加 减小] 类型:转载 时间:2014-08-22 这篇文章主要介绍了权限问题导致Nginx 403 F ...

  7. xampp出现 Access forbidden! 问题解决

    解决 XAMPP 出现 A今天安装了XAMPP 试了下,增加虚拟主机时出现没权限,apache配置文件httpd.conf的allow属性,把下图中的文字注释掉: 然后公开于外网出现以下错误,也很容易 ...

  8. Wampserver2.5配置虚拟主机出现403 Forbidden的处理方案

    WampServer是一款由法国人开发的Apache Web服务器.PHP解释器以 及MySQL数据库的整合软件包.免去了开发人员将时间花费在繁琐的配置环境过程,从而腾出更多精力去做开发.在windo ...

  9. vs2012启动网站调试提示 HTTP 错误 403.14 - Forbidden Web 服务器被配置为不列出此目录的内容

    启动vs2012调试网站的时候提示: HTTP 错误 403.14 - Forbidden Web 服务器被配置为不列出此目录的内容. 最可能的原因: 没有为请求的 URL 配置默认文档,并且没有在服 ...

随机推荐

  1. 【HMS Core 6.0全球上线】华为钥匙环服务,打造跨应用跨形态无缝登录体验

    华为钥匙环服务(Keyring),是HMS Core在安全领域开放的全新服务,为全球开发者提供用户认证凭据(以下简称"凭据")本地存储和跨应用.跨形态共享能力,帮助您在安卓应用.快 ...

  2. 初学python-day2 字符串格式化1

  3. 【UE4 插件】UnrealEnginePython 源码版编译、项目打包注意事项

    源码下载 git clone git clone https://github.com/20tab/UnrealEnginePython 直接下载zip https://github.com/20ta ...

  4. Manjaro安装Mariadb

    Mariadb是MySQL的一个复刻.由于MySQL被Oracle公司收购,MySQL的一些原始开发者担心MySQL会有开源方面的某些隐患,故领导开发了Mariadb. 如今,Mariadb已经作为许 ...

  5. Mac 系统如何利用软链接在根目录创建文件夹?

    作者:泥瓦匠 出处:https://www.bysocket.com/2021-10-26/mac-create-files-from-the-root-directory.html Mac 操作系统 ...

  6. Java并发:AbstractQueuedSynchronizer(AQS)

    队列同步器 AbstractQueuedSynchronizer 是一个公共抽象类.提供一个同步器框架,用于实现依赖于先进先出(FIFO)等待队列的阻塞锁和相关同步器(信号量,事件等).使用一个 in ...

  7. vscode插件集合整理

    针对PEPE8进行代码规范提示,安装flake8之后写代码的时候编辑器就会提示哪里出错,代码格式不规范也会提示,具体安装方式如下: 1.pip install flake8 2.安装flake8成功后 ...

  8. Python 检查当前运行的python版本 python2 python3

    检查当前运行的python版本,可以帮助程序选择运行python2还是python3的代码 import sys if sys.version > '3': PY3 = True else: P ...

  9. 从0到1搭建自己的组件(vue-code-view)库(上)

    0x00 前言 本文将从结构.功能等方面讲解下项目 vue-code-view 的搭建过程,您可以了解以下内容: 使用 vue cli 4从0搭建一个组件库及细致配置信息. 项目的多环境构建配置. 项 ...

  10. 【lwip】04-内存管理

    目录 前言 4. 内存管理 4.1 内存分配策略 4.1.1 固定大小的内存块 4.1.2 可变大小分配 4.2 动态内存池(pool) 4.2.1 介绍 4.2.2 内存池的预处理 4.2.3 内存 ...