bzoj 2662&bzoj 2763 SPFA变形
我们用dis[i,j]代表到i这个点,用j张票的最短路程,那么我们只需要在SPFA更新
的时候,用dis[i,j]更新dis[p,j]和dis[p,j+1]就行了
/**************************************************************
Problem:
User: BLADEVIL
Language: Pascal
Result: Accepted
Time: ms
Memory: kb
****************************************************************/
//By BLADEVIL
type
rec =record
x, use :longint;
end;
var
n, m, k :longint;
pre, other, len :array[..] of longint;
last :array[..] of longint;
l :longint;
dis :array[..,..] of longint;
flag :array[..,..] of boolean;
que :array[..] of rec;
ans :longint;
function min(a,b:longint):longint;
begin
if a>b then min:=b else min:=a;
end;
procedure connect(x,y,z:longint);
begin
inc(l);
pre[l]:=last[x];
last[x]:=l;
other[l]:=y;
len[l]:=z;
end;
procedure init;
var
i :longint;
x, y, z :longint;
begin
read(n,m,k);
for i:= to m do
begin
read(x,y,z);
connect(x,y,z);
connect(y,x,z);
end;
end;
procedure main;
var
h, t, q, p :longint;
cur, ti :longint;
i :longint;
begin
filldword(dis,sizeof(dis) div ,maxlongint div );
dis[,]:=;
h:=; t:=;
que[].x:=; que[].use:=;
while h<>t do
begin
h:=h mod +;
cur:=que[h].x;
ti:=que[h].use;
flag[cur,ti]:=false;
q:=last[cur];
while q<> do
begin
p:=other[q];
if dis[cur,ti]+len[q]<dis[p,ti] then
begin
dis[p,ti]:=dis[cur,ti]+len[q];
if not flag[p,ti] then
begin
t:=t mod +;
que[t].x:=p; que[t].use:=ti;
flag[p,ti]:=true;
end;
end;
if ti<k then
begin
if dis[cur,ti]+len[q] div <dis[p,ti+] then
begin
dis[p,ti+]:=dis[cur,ti]+len[q] div ;
if not flag[p,ti+] then
begin
t:=t mod +;
que[t].x:=p; que[t].use:=ti+;
flag[p,ti+]:=true;
end;
end;
end;
q:=pre[q];
end;
end;
ans:=maxlongint;
for i:= to k do ans:=min(ans,dis[n,i]);
writeln(ans);
end;
begin
init;
main;
end.
/**************************************************************
Problem:
User: BLADEVIL
Language: Pascal
Result: Accepted
Time: ms
Memory: kb
****************************************************************/
//By BLADEVIL
type
rec =record
x, use :longint;
end;
var
n, m, k :longint;
pre, other, len :array[..] of longint;
last :array[..] of longint;
l :longint;
dis :array[..,..] of longint;
flag :array[..,..] of boolean;
que :array[..] of rec;
ans :longint;
st, fin :longint;
function min(a,b:longint):longint;
begin
if a>b then min:=b else min:=a;
end;
procedure connect(x,y,z:longint);
begin
inc(l);
pre[l]:=last[x];
last[x]:=l;
other[l]:=y;
len[l]:=z;
end;
procedure init;
var
i :longint;
x, y, z :longint;
begin
read(n,m,k);
read(st,fin);
for i:= to m do
begin
read(x,y,z);
connect(x,y,z);
connect(y,x,z);
end;
end;
procedure main;
var
h, t, q, p :longint;
cur, ti :longint;
i :longint;
begin
filldword(dis,sizeof(dis) div ,maxlongint div );
dis[st,]:=;
h:=; t:=;
que[].x:=st; que[].use:=;
while h<>t do
begin
h:=h mod +;
cur:=que[h].x;
ti:=que[h].use;
flag[cur,ti]:=false;
q:=last[cur];
while q<> do
begin
p:=other[q];
if dis[cur,ti]+len[q]<dis[p,ti] then
begin
dis[p,ti]:=dis[cur,ti]+len[q];
if not flag[p,ti] then
begin
t:=t mod +;
que[t].x:=p; que[t].use:=ti;
flag[p,ti]:=true;
end;
end;
if ti<k then
begin
if dis[cur,ti]<dis[p,ti+] then
begin
dis[p,ti+]:=dis[cur,ti];
if not flag[p,ti+] then
begin
t:=t mod +;
que[t].x:=p; que[t].use:=ti+;
flag[p,ti+]:=true;
end;
end;
end;
q:=pre[q];
end;
end;
ans:=maxlongint;
for i:= to k do ans:=min(ans,dis[fin,i]);
writeln(ans);
end;
begin
init;
main;
end.
bzoj 2662&bzoj 2763 SPFA变形的更多相关文章
- BZOJ 4898 [APIO2017] 商旅 | SPFA判负环 分数规划
BZOJ 4898 [APIO2017] 商旅 | SPFA判负环 分数规划 更清真的题面链接:https://files.cnblogs.com/files/winmt/merchant%28zh_ ...
- NOIP2009最优贸易[spfa变形|tarjan 缩点 DP]
题目描述 C 国有 n 个大城市和 m 条道路,每条道路连接这 n 个城市中的某两个城市.任意两个 城市之间最多只有一条道路直接相连.这 m 条道路中有一部分为单向通行的道路,一部分 为双向通行的道路 ...
- bzoj 2662: [BeiJing wc2012]冻结【分层图+spfa】
死活想不到分层图emmm 基本想法是建立分层图,就是建k+1层原图,然后相邻两层之间把原图的边在上一层的起点与下一层的终点连起来,边权为val/2,表示免了这条边的边权,然后答案就是第0层的s到k层的 ...
- BZOJ 2662: [BeiJing wc2012]冻结(最短路)
这道题和 BZOJ 2763飞行路线 几乎一模一样..然后飞行路线我是1A,这道题WA了4次,我开始怀疑我的智商了.. ---------------------------------------- ...
- bzoj 3875 骑士游戏 - spfa - 动态规划
Description [故事背景] 长期的宅男生活中,JYY又挖掘出了一款RPG游戏.在这个游戏中JYY会 扮演一个英勇的骑士,用他手中的长剑去杀死入侵村庄的怪兽. [问题描述] 在这个游戏中,J ...
- [BZOJ] 2662: [BeiJing wc2012]冻结
https://www.lydsy.com/JudgeOnline/problem.php?id=2662 第一次写分层图(捂脸) 一开始真的naive地建图了,T到飞起.. 可以省下建图的空间,直接 ...
- Bzoj 2662: [BeiJing wc2012]冻结 dijkstra,堆,分层图,最短路
2662: [BeiJing wc2012]冻结 Time Limit: 3 Sec Memory Limit: 128 MBSubmit: 647 Solved: 348[Submit][Sta ...
- bzoj 2662 [BeiJing wc2012]冻结——分层图
题目:https://www.lydsy.com/JudgeOnline/problem.php?id=2662 这种的都是分层图. #include<iostream> #include ...
- BZOJ 1046 上升序列(LIS变形)
要保证长度为L的序列下标字典序最小,当然要尽量选前面的数. 如何判断前面的数是否满足条件?,只需要知道这个数开头的递增序列的最长长度是多少,如果不小于L,那么必然可以加入这个数.还需判断一下它是否大于 ...
随机推荐
- [转] 前端开发利器--Brackets 的七种武器和旁门左道
转自:http://www.jianshu.com/p/ff7798aa4548 Brackets是Adobe开发的web编辑器,是一款免费开源.多平台支持的软件,并在于GitHub上维护.Brack ...
- js滚动及可视区域的相关的操作
element.getBoundingClientRect 判断指定元素相对于页面可视窗口的位置信息,通常结合windows.onScroll方法使用,当element.getBoundingClie ...
- 深挖 NGUI 基础 之UICamera (二)
一.UI Camera作用 UICamera需要挂载在摄像机上才能发挥作用 UICamera仅负责 发送NGUI 事件 到 脚本所附加的摄像机中看得到的对象,比如我自定义了NGUI层(在Inspect ...
- 为Zabbix配置Nova服务、Keystone和Placement进程CPU和内存usage监控
目前已经完成了RabbitMQ和MySQL的监控项配置,还差对nova-api.nova-conductor.nova-scheduler和keystone进程CPU和内存 usage的监控,类似的轮 ...
- HDU 4441 Queue Sequence(优先队列+Treap树)(2012 Asia Tianjin Regional Contest)
Problem Description There's a queue obeying the first in first out rule. Each time you can either pu ...
- Python中enumerate函数用法详解
enumerate函数用于遍历序列中的元素以及它们的下标,多用于在for循环中得到计数,enumerate参数为可遍历的变量,如 字符串,列表等 一般情况下对一个列表或数组既要遍历索引又要遍历元素时, ...
- Python-爬取"我去图书馆"座位编码
原文地址:http://fanjiajia.cn/2018/11/22/Python-%E7%88%AC%E5%8F%96%E2%80%9D%E6%88%91%E5%8E%BB%E5%9B%BE%E4 ...
- JS实现双击编辑可修改
需求描述:在一段文字处双击可以进行修改,也就是双击后创建输入框,输入内容,在输入框失去焦点后将输入的内容再以文字的形式显示出来,以下是html代码: 1 <fieldset> 2 < ...
- C++关于堆的函数
建立堆 make_heap(_First, _Last, _Comp) 默认是建立最大堆的.对int类型,可以在第三个参数传入greater<int>()得到最小堆. 在堆中添加数据 ...
- [剑指Offer] 10.矩形覆盖
题目描述 我们可以用2*1的小矩形横着或者竖着去覆盖更大的矩形.请问用n个2*1的小矩形无重叠地覆盖一个2*n的大矩形,总共有多少种方法? [思路]可归纳得出结论: f(n) = f(n-1) + f ...