CF1455G Forbidden Value
本题教训我们:
如果遇到在返回值域范围的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的更多相关文章
- 遇到 HTTP 错误 403.14 - Forbidden?
打开 http://localhost:1609 报错: HTTP 错误 403.14 - Forbidden Web 服务器被配置为不列出此目录的内容 解决方案一:设置默认首页 在 Web.conf ...
- Forbidden You don't have permission to access / on this server PHP
在新安装的谷歌游览器里,打不了PHP网站了,错误显示: Forbidden You don't have permission to access / on this server. 原因还是配置权限 ...
- Apache2.4部署django出现403 Forbidden错误解决办法
前言:Apache2.4部署django出现403 Forbidden错误最好要结合apache中的错误日志来观察出现何种错误导致出现403错误 下午百度了一下午没找到解决办法,试了n种方法,简直坑爹 ...
- vs2015启动网站调试提示 HTTP 错误 403.14 - Forbidden Web 服务器被配置为不列出此目录的内容。 解决方法
今天安装了vs2015 下载一个项目进行试用,启动调试的时候提示 HTTP 错误 403.14 - Forbidden Web 服务器被配置为不列出此目录的内容. 最可能的原因: 没有为请求的 URL ...
- [Linux] Nginx networking 403 Forbidden 静态文件不允许查看
nginx 的 403 Forbidden errors 表示你在请求一个资源文件但是nginx不允许你查看. 403 Forbidden 只是一个HTTP状态码,像404,200一样不是技术上的错误 ...
- [转]权限问题导致Nginx 403 Forbidden错误的解决方法
权限问题导致Nginx 403 Forbidden错误的解决方法 投稿:junjie 字体:[增加 减小] 类型:转载 时间:2014-08-22 这篇文章主要介绍了权限问题导致Nginx 403 F ...
- xampp出现 Access forbidden! 问题解决
解决 XAMPP 出现 A今天安装了XAMPP 试了下,增加虚拟主机时出现没权限,apache配置文件httpd.conf的allow属性,把下图中的文字注释掉: 然后公开于外网出现以下错误,也很容易 ...
- Wampserver2.5配置虚拟主机出现403 Forbidden的处理方案
WampServer是一款由法国人开发的Apache Web服务器.PHP解释器以 及MySQL数据库的整合软件包.免去了开发人员将时间花费在繁琐的配置环境过程,从而腾出更多精力去做开发.在windo ...
- vs2012启动网站调试提示 HTTP 错误 403.14 - Forbidden Web 服务器被配置为不列出此目录的内容
启动vs2012调试网站的时候提示: HTTP 错误 403.14 - Forbidden Web 服务器被配置为不列出此目录的内容. 最可能的原因: 没有为请求的 URL 配置默认文档,并且没有在服 ...
随机推荐
- 2020年09月15日-项目开发-python二次处理代码文件
Caterpillar通过将BPMN生成为solidity代码后, 我需要对solidity代码做二次处理,即在其中的特定函数中插入event类型,以便去做事件监听. 最终生成的不仅包括solidit ...
- Java:NIO 学习笔记-3
Java:NIO 学习笔记-3 根据 黑马程序员 的课程 JAVA通信架构I/O模式,做了相应的笔记 3. JAVA NIO 深入剖析 在讲解利用 NIO 实现通信架构之前,我们需要先来了解一下 NI ...
- 《HelloGitHub》第 67 期
兴趣是最好的老师,HelloGitHub 让你对编程感兴趣! 简介 分享 GitHub 上有趣.入门级的开源项目. https://github.com/521xueweihan/HelloGitHu ...
- 大牛针对零基础入门c语言详解指针(超详细)
C语言指针说难不难但是说容易又是最容易出错的地方,因此不管是你要做什么只要用到C指针你就跳不过,今天咱们就以 十九个例子来给大家简单的分析一下指针的应用,最后会有C语言视频资料提供给大家更加深入的参考 ...
- 修炼Servlet
修炼Servlet 一.Servlet简单认识 1.Servlet是什么 Java Servlet 是运行在 Web 服务器或应用服务器上的程序,它是作为来自 Web 浏览器或其他 HTTP 客户端的 ...
- Envoy实现.NET架构的网关(二)基于控制平面的动态配置
什么是控制平面 上一篇我们讲了文件系统的动态配置,这次我们来看看通过Control Panel来配置Envoy.控制平面就是一个提供Envoy配置信息的单独服务,我们可以通过这个服务来修改Envoy的 ...
- jQuery中onload与ready区别
onload和ready的区别document.ready和onload的区别为:加载程度不同.执行次数不同.执行速度不同.1.加载程度不同 document.ready:是DOM结构绘制完毕后就执行 ...
- prometheus(1)之核心概念
个人理解:prometheus核心在于 1.prom数据类型的理解 (4钟数据类型 与常用的promQL语法 其实很容易) 2.各种服务发现与正则拼接(服务发现的拼接其实官方定义好的 理解就行) 3. ...
- 基于大量图片与实例深度解析Netty中的核心组件
本篇文章主要详细分析Netty中的核心组件. 启动器Bootstrap和ServerBootstrap作为Netty构建客户端和服务端的路口,是编写Netty网络程序的第一步.它可以让我们把Netty ...
- ORACLE,mysql中替换like的函数
数据库中存储了海量的数据,当查询时使用like,速度明显变慢.我在做项目时,发现使用内部函数INSTR,代替传统的LIKE方式查询,并且速度更快. INSTR()函数返回字符串中子字符串第一次出现的位 ...