本题就是在一条1-n的路径上找p,q(先经过p),使得q-p最大。

考虑建正反图,正图上求出d[x],表示1-x的路径经过的节点最小值,反图上则从n开始求出f[x],x-n的最大值,最后枚举断点i,取最大的f[i]-d[i]就是答案。

基于动态规划的思想。

 1 #include<bits/stdc++.h>
2 using namespace std;
3 const int N=1e5+10,M=1e6+10;
4 int head[N],to[M],nxt[M],edge[M],tot;
5 int n,m,a[N],d[N],f[N];
6 bool v[N];
7 queue<int> q;
8
9 void add(int x,int y,int z){
10 nxt[++tot]=head[x];
11 head[x]=tot;
12 to[tot]=y;
13 edge[tot]=z;//1只能正着走,-1只能倒着走,2正反都可以
14 }
15
16 void spfa(int *d,int st,int z){
17 d[st]=a[st];
18 q.push(st);v[st]=true;
19 while(!q.empty()){
20 int x=q.front();
21 q.pop();v[x]=false;
22 for(int i=head[x];i;i=nxt[i]){
23 if(edge[i]==z||edge[i]==2){
24 int y=to[i];
25 int val=z==1?min(d[x],a[y]):max(d[x],a[y]);
26 if(z==1&&d[y]>val||z==-1&&d[y]<val){
27 d[y]=val;//更新
28 if(!v[y]) {q.push(y);v[y]=true;}
29 }
30 }
31 }
32 }
33 }
34
35 int main(){
36 scanf("%d%d",&n,&m);
37 for(int i=1;i<=n;i++) scanf("%d",&a[i]);
38 for(int i=1;i<=m;i++){
39 int x,y,z;
40 scanf("%d%d%d",&x,&y,&z);
41 add(x,y,z);
42 add(y,x,z==1?-1:z);
43 }
44 memset(d,0x3f,sizeof(d));
45 spfa(d,1,1); // 从1出发求前缀min(d),只有1和2的边可以用
46 memset(f,0xcf/*负无穷*/,sizeof(f));
47 spfa(f,n,-1);// 从n出发倒着求后缀max(d),只有-1和2的边可以用
48 int ans=0;
49 for(int i=1;i<=n;i++) ans=max(ans,f[i]-d[i]);
50 printf("%d\n",ans);
51 }

最新文章

  1. 敏捷转型历程 - Sprint3 回顾会
  2. html之input系列标签
  3. mysql安装过程中出现的错误问题解决方案
  4. QTP检查点和参数化_百度一下
  5. ado.net实现一个通知公告功能
  6. sql 2000 &quot;无法执行查询,因为一些文件缺少或未注册&quot;的
  7. #CI的MVC实现
  8. .net SMTP发送Email 更新(可带附件)
  9. 双因素认证(2FA)教程
  10. Java多线程(七)——线程休眠
  11. go vendor管理Golang项目依赖
  12. Linux 抓包工具:tcpdump
  13. openssh升级到openssh-7.5p1踩坑
  14. HTML5中常用的标签(及标签的属性和作用)
  15. html5引擎开发 -- 引擎消息中心和有限状态机 - 初步整理 一
  16. wpa2破解代码思路(教你写poc)
  17. Spring中@Transactional事务回滚
  18. 【深入理解JAVA虚拟机】第5部分.高效并发.1.Java内存模型与线程。
  19. macos 安装 brew
  20. opencv学习笔记二

热门文章

  1. 第三天python3 字典
  2. 搞懂前端二进制系列(二):&#127816;File、FileReader与Base64
  3. 使用Typora+EasyBlogImageForTypora写博客,无图床快速上传图片
  4. 如何在本地配置lemonlime和使用lemonlime测试交互题
  5. 创新能力加速产业发展,SphereEx 荣获“中关村银行杯”『大数据与云计算』领域 TOP1
  6. @babel/runtime 和 @babel/plugin-transform-runtime 两个的作用是什么
  7. jsp获取下拉框组件的值
  8. mysql存储过程的创建和调用
  9. P4675 [BalticOI 2016 day1]Park (并查集)
  10. C#基础_理解类