C20220711T4 移动

news/2024/4/23 18:18:42/文章来源:https://www.cnblogs.com/zhouzizhe/p/16639799.html

牛牛从0出发走到 \(n+1\) ,每秒可以选择向前走一步,向后走一步或者不走,有一些时刻不让呆在某一格,求最短到达时间, \(n\leq 10^5\)


这是一道很神奇的压轴题(其实并没有什么高深的算法)。把不让呆在某一个转换成可以呆在某一格,用 \((x,i,t)\) 表示一个状态:在第 \(x\) 的位置走到第 \(i\) 个可以走到的点的时间 \(t\) 。并用 \(f[i]\) 表示到第 \(i\) 段时间的最短时间,然后用优先队列不断更新状态,最后就可以得到答案。

#include<bits/stdc++.h>
#define ll long long
#define rg register
#define FOR(x,y,z) for(rg int x=y;x<=z;++x)
#define ROF(x,y,z) for(rg int x=y;x>=z;--x)
#define mp std::make_pair
#define pb push_back
#define pii std::pair< int , int >
#define Inf 0x3f3f3f3f
namespace IO{inline ll in(){ll x=0,f=1;char c;do{c=getchar();if(c=='-')f=-1;}while(c<'0' || c>'9');while(c<='9' && c>='0'){x=(x<<3)+(x<<1)+c-'0';c=getchar();}return f*x;}
}
using namespace IO;std::vector< pii > v[200005],cur;
struct node{int id,x,t;node(int a,int b,int c){id=a;x=b;t=c;}
};int n,m;
int id[200005],f[200005];
bool operator > (node a,node b){return a.t>b.t;
}std::priority_queue< node , std::vector<node> , std::greater<node> > q;void calc(node p,int x){int r=v[p.x][p.id-id[p.x]].second;int i=std::lower_bound(v[x].begin(),v[x].end(),mp(p.t+1,0))-v[x].begin()-1;if(v[x][i].second>=p.t+1){if(f[id[x]+i]>p.t+1){f[id[x]+i]=p.t+1;q.push(node(id[x]+i,x,p.t+1));}}++i;while(i<(int)v[x].size() && v[x][i].first<=r+1){if(f[id[x]+i]>v[x][i].first){f[id[x]+i]=v[x][i].first;q.push(node(id[x]+i,x,v[x][i].first));}++i;}
}void solve(){memset(f,0x3f,sizeof(f));f[0]=0;q.push(node(0,0,0));while(q.size()){node p=q.top();q.pop();if(p.t>f[p.id])continue;if(p.x>0)calc(p,p.x-1);if(p.x<n+1)calc(p,p.x+1);}
}int main(){n=in(),m=in();FOR(i,1,m){int a=in(),b=in(),c=in();v[a].pb(mp(b,c));}v[0].pb(mp(0,Inf));v[n+1].pb(mp(0,Inf));id[1]=1;FOR(i,1,n){std::sort(v[i].begin(),v[i].end());cur.clear();int r=-1;FOR(j,0,(int)v[i].size()-1){pii p=v[i][j];if(p.first>r+1)cur.pb(mp(r+1,p.first-1));r=std::max(r,p.second);}cur.pb(mp(r+1,Inf));v[i]=cur;id[i+1]=id[i]+v[i].size();}solve();printf("%d\n",f[id[n+1]]);return 0;
}

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

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

相关文章

P1231 教辅的组成

求三重匹配最大匹配数。 \(N\leq 10^5\),\(M_1\), \(M_2 \leq 20000\)。首先要承认,这一题属于P3254的延申,可以先复习一下P3254的题解。 然而这一题又和P3254不太一样 (不就是从两条边匹配变成三条边吗) 那就错了!看上面这张图,如果用最大流来跑,最后答案会是2条,但 …

方正璞华入选“火炬智能制造服务商”和“智能制造产品服务”!

方正璞华协助客户实现数字化运营管理和工业互联网产业升级。日前,经初审、专家评审、公示等程序,凭借多年在工业领域的实践经验与优质产品,方正璞华成功入选“火炬智能制造服务商”和“智能制造产品服务”,标志着厦门火炬高新区对方正璞华信息企业数字化转型赋能实力的充分…

[CTF]2022 CNSS夏令营 WebReverse 复现wp

写在前面 很有趣的一次(大)学前教育, 作为一个22级泥电新生, 对CTF网安类的东西完全是一窍不通, 进新生群然后就被拉进来Van了. 结果没想到还挺好玩(可能是我这几天太无聊了), 边学边打居然还能霸几天榜一, 满足了. 其实我就只是总榜高, 细分分区我其实不是很行的, 毕竟都是现学…

JUC学习23:理解JMM

JUC学习23:理解JMM面试题:请你谈谈你对Volatile的理解:Volatile是Java虚拟机提供轻量级的同步机制;1,保证可见性(JMM);2,不保证原子性;3,禁止指令重排; 什么是JMM:JMM:Java内存模型,不存在的东西,概念,是一种约定;关于JMM的一些同步约定:线程解锁前:必须把…

channel与range、select

channel与range、selectpackage mainimport "fmt"func main() {c := make(chan int)go func() {for i := 0; i < 5; i++ {c <- i}//close可以关闭一个channelclose(c)}()//可以使用range来迭代不断操作channelfor data := range c {fmt.Println(data)}fmt.Prin…

channel

channel有缓冲与无缓冲同步问题package mainimport ("fmt""time" )func main() {c := make(chan int, 3) //带有缓冲的channelfmt.Println("len(c) = ", len(c), ", cap(c)", cap(c))go func() {defer fmt.Println("子go程结束&q…

selenium 常用操作汇总

使用selenium1、查看Chrome版本去下载浏览器驱动 驱动下载链接2、selenium官方网站 官方文档 selenium通信原理对于每一条Selenium脚本,一个http请求会被创建并且发送给浏览器的驱动 浏览器驱动中包含了一个HTTP Server,用来接收这些http请求 HTTP Server接收到请求后根据请…

不想当Window的Dialog不是一个好Modal,弹窗翻身记

Windows的灵魂是什么?当然是Window,当方便快捷的多窗口进入人们视野的时候,大家无不为之惊呼太好用了!!弹窗是我们熟视无睹的一种交互方式,经常用到,但从没好好想过这种交互行为背后的意义... 弹窗是Windows的灵魂 Windows的灵魂是什么?当然是Window,当方便快捷的多窗…

工具 -- git 汉化

说明 来源转载 https://blog.csdn.net/mansir123/article/details/121692125Git GUI汉化包来源 https://github.com/stayor/git-gui-zh转载 https://www.cnblogs.com/chenghu/articles/12678500.html1、git bash 汉化 这个Git bash本身就支持中文,只需要在打开Git bash后命令窗…

好多不懂的和bug

1、知道了MD5, 2、知道了validate是干什么的,(validate中的rules中编写验证规则,规范输入),可以在管理员在网站修改数据的时候对输入进行限制。1 <script type="text/javascript">2 $(function(){3 $("#addForm").validate({4 rul…

DevTools 无法加载来源映射:无法加载 webpack net::ERR_UNKNOWN_URL_SCHEME

问题:DevTools 无法加载来源映射:无法加载 webpack:///node_modules/element-plus/es/components/notification/src/notification.mjs.map 的内容:Fetch through target failed: Unsupported URL scheme; Fallback: HTTP 错误:状态代码 404,net::ERR_UNKNOWN_URL_SCHEME 当…

JAVA进阶--static、工具类、单例、继承--2022年8月28日

第一节 static静态关键字1、成员变量的分类和访问分别是什么样的?静态成员变量(有static修饰,属于类,加载一次,可以被共享访问)访问格式:类名.变量名(推荐)对象名.变量名(不推荐)实例成员变量(无static修饰,属于对象)访问格式:对象名.变量名2、两种成员变量各自…

QA特辑 | 看了这场直播,我找到了设备指纹“从不说谎”的原因

除了身份证外,设备指纹可能是唯一一个可以证明你是谁的方法。 究其原因,就在于设备指纹的唯一性和稳定性。 8月 25 日下午 15 点,顶象技术总监杜威就设备指纹的唯一性和稳定性的核心算法展开分享。直播过程中,我们也收到了一系列关于设备指纹唯一性稳定性核心算法的疑问,现…

YBTOJ [树状数组] 二进制

哇咔咔,此乃真好题!这种东西当然要抢个榜首辣qaq。 Solution 首先不带 \(+x\) 的做法,相信大家都会,维护一下全局二进制每一位 \(1\) 的个数,把 \(y\) 二进制拆分一下,就知道答案了。 这个 \(+x\) 真滴很恶心啊! 考虑这样一个事实,非常滴实用: 对于一个 \(x\) \(and\)…

科普达人丨一图看懂安全组

建议收藏安全组是一种虚拟防火墙,通过安全组规则控制 ECS 实例出/入方向的流量,保障云服务器的安全。本文将通过介绍安全组的工作原理、功能、默认安全组和规则,以及快速上手使用安全组的操作等方面的介绍,您对于安全组有一个全面的了解,帮助您更好、更安全地开展业务上云…

京东云PostgreSQL在GIS场景的应用分享

在地图或地理信息有关的场景里,地址关键词的检索尤其重要。比如打开百度地图,想要查询某个位置的信息“北京市海淀区清华东路17号中国农业大学”,往往我们输入的是关键词“中国农业大学”而不是精确到街道的详细地址信息。在地图或地理信息有关的场景里,地址关键词的检索尤…

超全的正则表达式速查手册

一、校验数字的表达式 数字:^[0-9]*$ n位的数字:^\d{n}$ 至少n位的数字:^\d{n,}$ m-n位的数字:^\d{m,n}$ 零和非零开头的数字:^(0|[1-9][0-9]*)$ 非零开头的最多带两位小数的数字:^([1-9][0-9]*)+(.[0-9]{1,2})?$ 带1-2位小数的正数或负数:^(\-)?\d+(\.\d{1,2})?$ 正…

HCIA学习笔记二十六:手工负载分担模式二层链路聚合

一、链路聚合的应用场景• 链路聚合一般部署在核心结点,以便提升整个网络的数据吞吐量。 二、链路聚合• 链路聚合能够提高链路带宽,增强网络可用性,支持负载分担。 三、链路聚合模式• 手工负载分担模式下所有活动接口都参与数据的转发,分担负载流量。 • LACP模式支持链路…

Kotlin的空检查

我们在使用Java语言时,经常会出现空指针异常NullPointerException。Kotlin基于过往语言设计的经验对这一问题进行了改良,把运行时可能出现的null问题,以编译时错误的方式,提前在编译期强迫我们重视起来,而不是等到运行时报错,防患于未然,提高我们程序的健壮性。 Kotlin语…

智慧城市建设的三个阶段

今天的中国城市,正在疾步向前拥抱智慧时代,我国是全球智慧城市建设最为积极的国家之一。近年来,随着政策红利进一步释放与资金的大量投入,智慧城市产业也将迎来新的发展高潮。智慧城市建设步入快车道时代!据不完全统计,中国智慧城市的发展数量已经超过500个,居世界之最。…