• 题目
  • 题解
  • 代码

题目

背景 Background

这次小杉来到了经典美剧《越狱》的场景里……
他被抓起来了(-.-干嘛幻想这么郁闷的场景……)。
小杉身为新一代的Scofield,在挖了半个月之后终于挖通牢房里的地道。
在地道里,无数的管道路线困惑了他。
(若对情节有任何疑问,请观看原剧)

描述Description

小杉看了看自己的纹身,明白了整个管道网是由N个小房间和若干小房间之间的单向的管道组成的。
小房间编号为不超过N的正整数。
每个管道都有一个人品限制值,小杉只能在人品不超过该限制值时通过。
小杉一开始在房间1,现在小杉想知道,每个小房间他最多能够以人品多少的状态到达。
注意,小杉的人品在出发以后是不会改变的。

第一行有一个正整数N(1<=N<=2000)。
接下来若干行描述管道,每行三个正整数A,B,R(1<=A,B<=N,1<=R<1e5,A!=B),表示A房间有一条到达B房间的人品限制值为R的管道(注意从B房间不可由此管道到达A房间,即管道是单向的,每组A,B至多只出现一次)。
整个输入数据以一行000结束。

对每组测试数据输出N-1行,分别表示对于2到N号的小房间,小杉最多能够以人品多少的状态到达。若某房间小杉不能到达,请输出0。

4
1 2 30
1 3 20
2 3 25
3 4 30
2 4 20
0 0 0

30
25
25

注释Hint
对于样例数据:
小杉最多能够在人品为30的情况下到达小房间2(1->2)
小杉最多能够在人品为25的情况下到达小房间3(1->2->3)
小杉最多能够在人品为25的情况下到达小房间4(1->2->3->4)

题解

很显然是最短路,我打了一个SPFA
和普通的SPFA不同的地方在于

if d[x]+w[k]<d[y] then

换成了

if min(d[v[(h-1) mod max+1]],w[k])>d[y[k]] then

刚开始担心爆内存,算了老半天,省了所有能省的内存,结果没爆,其实就算不省也不会爆……
longint 4字节 int64 8字节

时间复杂度O(km)m为边的条数,最大为n2,k为小常数

时间复杂度O(km)m为边的条数,最大为n^2,k为小常数

代码

constmax=2000;
varn,i,j,k,t:longint;w:array[1..4000000]of longint;y,ne:array[1..4000000]of integer;d,ls:array[1..2000]of longint;b:array[1..2000]of boolean;v:array[1..2000]of longint;function min(a,b:longint):longint;
beginif a<b then exit(a) else exit(b);
end;procedure spfa;
vari,j,k,h,t:longint;
beginfillchar(b,sizeof(b),true);h:=0;t:=1;v[1]:=1;b[1]:=false;d[1]:=maxlongint;while h<t dobegininc(h);k:=ls[v[(h-1) mod max+1]];while k>0 dobeginif min(d[v[(h-1) mod max+1]],w[k])>d[y[k]] thenbegind[y[k]]:=min(d[v[(h-1) mod max+1]],w[k]);if b[y[k]] thenbeginb[y[k]]:=false;inc(t);v[(t-1) mod max+1]:=y[k];end;end;k:=ne[k];end;b[v[(h-1) mod max+1]]:=true;end;
end;beginreadln(n);readln(i,j,k);while (i<>0)and(j<>0)and(k<>0)dobeginif j=1 then begin readln(i,j,k);continue;end;inc(t);y[t]:=j;w[t]:=k;ne[t]:=ls[i];ls[i]:=t;readln(i,j,k);end;spfa;for i:=2 to n dowriteln(d[i]);
end.

8.17 想越狱的小杉 1535相关推荐

  1. [vijos P1391] 想越狱的小杉

    考前最后一题,竟然是第一次码SPFA,虽然这个算法早有耳闻,甚至在闻所未闻之前自己有过一个类似的想法,说白了就是广搜啊,但是敲起来还是第一次啊,而且这还不是真正意义上的SPFA. 完全按照自己想法来码 ...

  2. Vijos P1391 想越狱的小杉

    Vijos P1391 想越狱的小杉 题目 背景 这次小杉来到了经典美剧<越狱>的场景里-- 他被抓起来了(-.-干嘛幻想这么郁闷的场景--). 小杉身为新一代的Scofield,在挖了半 ...

  3. 【图论-最短路变形】想越狱的小杉

    [图论-最短路变形]想越狱的小杉 Time Limit:1000MS  Memory Limit:65536K Description 背景 Background 这次小杉来到了经典美剧<越狱& ...

  4. Vijos 1391 想越狱的小杉

    Vijos 1391 想越狱的小杉 题目位置 https://vijos.org/p/1391 题目描述 小杉看了看自己的纹身,明白了整个管道网是由N个小房间和若干小房间之间的单向的管道组成的. 小房 ...

  5. 【vijos】【图论】【最短路径】【SPFA】想越狱的小杉

          From lolanv 想越狱的小杉               背景 Background     这次小杉来到了经典美剧<越狱>的场景里--  他被抓起来了(-.-干嘛幻想 ...

  6. [spfa]SSL 1535 想越狱的小杉

    Description 小杉看了看自己的纹身,明白了整个管道网是由N个小房间和若干小房间之间的单向的管道组成的. 小房间编号为不超过N的正整数. 每个管道都有一个人品限制值,小杉只能在人品不超过该限制 ...

  7. Vijos - 想越狱的小杉(最短路)

    题目链接:https://vijos.org/p/1391 背景 这次小杉来到了经典美剧<越狱>的场景里-- 他被抓起来了(-.-干嘛幻想这么郁闷的场景--). 小杉身为新一代的Scofi ...

  8. #104-[SPFA]想越狱的小杉

    Description 这次小杉来到了经典美剧<越狱>的场景里-- 他被抓起来了(-.-干嘛幻想这么郁闷的场景--). 小杉身为新一代的Scofield,在挖了半个月之后终于挖通牢房里的地 ...

  9. 【vijos】【spfa最短路】想越狱的小杉

    描述 小杉看了看自己的纹身,明白了整个管道网是由N个小房间和若干小房间之间的单向的管道组成的. 小房间编号为不超过N的正整数. 对于某个管道,小杉只能在人品不超过一定程度时通过. 小杉一开始在房间1, ...

最新文章

  1. M站开发规范——By Klax
  2. oracle 用户 表空间绑定,ORACLE表空间绑定用户操作流程
  3. DDL与DML的区别
  4. Mysql和Oracle获取自增主键
  5. [游泳] Sun Yang 1500 Swimming Stroke Analysis London 2012
  6. 一加9 Pro高清渲染图曝光:后置四摄加持哈苏logo真香
  7. 【flume】flume案例集锦
  8. jdbc增删改查有哪些步骤_JDBC打造通用增删改方法
  9. 无聊的小知识--数据中心为啥要建在山区
  10. 基于opencv答题卡识别
  11. 44、Search contract
  12. 小学生遭校长拳击内脏出血 求医救命钱遭抢(图)
  13. python win32con_Python笔记_第二篇_面向过程_第二部分_4.常用模块的简单使用_窗体控制模块(win32con、win32gui)...
  14. Bootstrap登录页面带验证码
  15. 多个containers 共用一个pvc_庆阳PVC排水管生产线销售,真不错_崔氏机械
  16. 湖北户外帐篷在野外户外需要注意的方面
  17. 深度学习笔记(一)了解深度学习
  18. 单精度与双精度是什么意思,有什么区别?
  19. 金山小火车【转自官网】(如果错误,请留言)
  20. kafka源码愫读(5)、ReplicaManager模块源码分析

热门文章

  1. uniapp采坑之二----模仿通讯录
  2. Visual Studio 2022 自定义头文件源文件切换快捷键
  3. c语言俄罗斯方块代码及实验报告,c语言俄罗斯方块实验报告.doc
  4. BAT等大厂十年研发经历,总结了12开发条经验
  5. php支付宝扫码登录接口,支付宝支付接口 - musam的个人空间 - OSCHINA - 中文开源技术交流社区...
  6. displaytag中配置说明
  7. 数据中心技术发展趋势初探
  8. linux 线程的调度策略
  9. python车牌识别系统开源代码_Python+Tensorflow+CNN实现车牌识别的示例代码
  10. 以FGSM算法为例的对抗训练的实现(基于Pytorch)