[JLOI 2011]飞行路线&[USACO 09FEB]Revamping Trails
Description
Input
Output
Sample Input
0 4
0 1 5
1 2 5
2 3 5
3 4 5
2 3 3
0 2 100
Sample Output
HINT
对于30%的数据,2<=n<=50,1<=m<=300,k=0;
对于50%的数据,2<=n<=600,1<=m<=6000,0<=k<=1;
对于100%的数据,2<=n<=10000,1<=m<=50000,0<=k<=10.
题解
题面放的是$[JLOI 2011]$飞行路线,这两道题一毛一样。区别就是$USACO$的数据$k<=20$,并且$s=1$,$t=n$。
建立分层图。
$f[u][t]$表示在节点u时已经免费乘坐t次的最少花费。照样跑最短路。
枚举与$u$相连的所有节点$v$,$w(u,v)$表示权值。
若$t<k$:
$$f[v][t+1]=min(f[v][t+1],f[u][t])$$
对于所有:
$$f[v][t]=min(f[v][t],f[u][t]+w(u,v))$$
由于$USACO$数据范围大了点,$STL$的优先队列还过不了,手打了个堆$A$了。
(注意代码中标红的地方二选一)
#include <set>
#include <map>
#include <ctime>
#include <cmath>
#include <queue>
#include <stack>
#include <vector>
#include <cstdio>
#include <string>
#include <cstring>
#include <cstdlib>
#include <iostream>
#include <algorithm>
#define LL long long
#define Max(a, b) ((a) > (b) ? (a) : (b))
#define Min(a, b) ((a) < (b) ? (a) : (b))
using namespace std;
const int INF = ~0u>>;
const int N = ;
const int M = ; int s, t;
struct tt{
int to, cost, next;
}edge[M*+];
int path[N+], top;
int n, m, k, u, v, c;
struct node{
int cost, u, t;
node () {}
node (int _cost, int _u, int _t) {cost = _cost, u = _u, t = _t;}
bool operator < (const node &b) const{
return cost > b.cost;
}
};
priority_queue<node>Q;
int f[N+][]; void add(int u, int v, int c){
edge[++top].to = v;
edge[top].next = path[u];
edge[top].cost = c;
path[u] = top;
}
void dijkstra(){
memset(f, /, sizeof(f));
f[s][] = ;
Q.push(node(, s, ));
while (!Q.empty()){
node tmp = Q.top(); Q.pop();
for (int i = path[tmp.u]; i; i=edge[i].next){
if (tmp.t < k && f[edge[i].to][tmp.t+] > f[tmp.u][tmp.t]){
f[edge[i].to][tmp.t+] = f[tmp.u][tmp.t];
Q.push(node(f[edge[i].to][tmp.t+], edge[i].to, tmp.t+));
}
if (f[edge[i].to][tmp.t] > f[tmp.u][tmp.t]+edge[i].cost){
f[edge[i].to][tmp.t] = f[tmp.u][tmp.t]+edge[i].cost;
Q.push(node(edge[i].to, edge[i].to, tmp.t));
}
}
}
} int main(){
scanf("%d%d%d", &n, &m, &k);
scanf("%d%d", &s, &t);//[JLOI 2011]飞行路线
s = 1, t = n;//[USACO 09FEB]Revamping Trails
for (int i = ; i <= m; i++){
scanf("%d%d%d", &u, &v, &c);
add(u, v, c);
add(v, u, c);
}
dijkstra();
printf("%d\n", f[t][k]);
return ;
}
[JLOI 2011]飞行路线&[USACO 09FEB]Revamping Trails的更多相关文章
- [BZOJ 2763][JLOI 2011] 飞行路线
2763: [JLOI2011]飞行路线 Time Limit: 10 Sec Memory Limit: 128 MBSubmit: 3203 Solved: 1223[Submit][Stat ...
- P4568 [JLOI2011]飞行路线 / P2939 [USACO09FEB]Revamping Trails G
题目描述 Link Alice 和 Bob 现在要乘飞机旅行,他们选择了一家相对便宜的航空公司.该航空公司一共在 \(n\) 个城市设有业务,设这些城市分别标记为 \(0\) 到 \(n-1\),一共 ...
- Bzoj 1579: [Usaco2009 Feb]Revamping Trails 道路升级 dijkstra,堆,分层图
1579: [Usaco2009 Feb]Revamping Trails 道路升级 Time Limit: 10 Sec Memory Limit: 64 MBSubmit: 1573 Solv ...
- BZOJ 1579: [Usaco2009 Feb]Revamping Trails 道路升级( 最短路 )
最短路...多加一维表示更新了多少条路 -------------------------------------------------------------------------------- ...
- 【BZOJ 1579】 1579: [Usaco2009 Feb]Revamping Trails 道路升级 (最短路)
1579: [Usaco2009 Feb]Revamping Trails 道路升级 Description 每天,农夫John需要经过一些道路去检查牛棚N里面的牛. 农场上有M(1<=M< ...
- BZOJ_1579_[Usaco2009 Feb]Revamping Trails 道路升级_分层图最短路
BZOJ_1579_[Usaco2009 Feb]Revamping Trails 道路升级_分层图最短路 Description 每天,农夫John需要经过一些道路去检查牛棚N里面的牛. 农场上有M ...
- P2939 [USACO09FEB]改造路Revamping Trails
P2939 [USACO09FEB]改造路Revamping Trails 同bzoj2763.不过dbzoj太慢了,bzoj又交不了. 裸的分层图最短路. f[i][j]表示免费走了j条路到达i的最 ...
- bzoj 1579: [Usaco2009 Feb]Revamping Trails 道路升级 -- 分层图最短路
1579: [Usaco2009 Feb]Revamping Trails 道路升级 Time Limit: 10 Sec Memory Limit: 64 MB Description 每天,农夫 ...
- [USACO09FEB] Revamping Trails 【分层图+Dijkstra】
任意门:https://www.luogu.org/problemnew/show/P2939 Revamping Trails 题目描述 Farmer John dutifully checks o ...
随机推荐
- field.setAccessible(true) 简介
今天查看别人写的代码时,发现这样一句代码,顿时来了兴趣. 需要注意setAccessible 并不是在Field中的,而是在AccessibleObject中. 下面是AccessibleObject ...
- 听翁恺老师mooc笔记(11)--结构和函数
结构作为函数参数: 声明了一个结构就有了一种自定义的数据类型,这个数据类型和int.float.double一样,int等基本类型可以作为函数的参数,那么这种个自定义的结构类型也应该可以作为函数参数, ...
- 201621123057 《Java程序设计》第11周学习总结
1. 本周学习总结 1.1 以你喜欢的方式(思维导图或其他)归纳总结多线程相关内容. 2. 书面作业 本次PTA作业题集多线程 1. 源代码阅读:多线程程序BounceThread 1.1 BallR ...
- HASH方法课下补分博客
课堂要求:利用除留余数法为下列关键字集合的存储设计hash函数,并画出分别用开放寻址法和拉链法解决冲突得到的空间存储状态(散列因子取0.75)关键字集合:85,75,57,60,65,(你的8位学号相 ...
- vmware ubuntu蓝屏
ctrl+alt+f4 sudo apt-get update sudo apt-get upgrade sudo apt-get install xserver-xorg-lts-utopic su ...
- JAVA的循环控制与循环嵌套
循环控制和循环嵌套 循环控制是除了循环条件之外,控制循环是否进行的一个机制,这给处理循环问题带来了灵活性.循环体内的语句块可以是顺序执行的语句,可以是分支结构的语句,也可以是循环语句,循环中含循环,就 ...
- R语言基础2
----------------------------------R语言学习与科研应用,科研作图,数据统计挖掘分析,群:719954246-------------------------- 通常, ...
- JAVA_SE基础——3.Java程序的开发流程
上一篇,写的是JAVA的环境变量的配置,今天我抽空写篇Java程序的开发流程,下面的教程是我结合书本和毕向东老师的视频写下的心的~ 在没有真正写Java程序前,首先需要了解Java程序的开发过程. S ...
- php的set_time_limit()函数
set_time_limit(0); 括号里边的数字是执行时间,如果为零说明永久执行直到程序结束,如果为大于零的数字,则不管程序是否执行完成,到了设定的秒数,程序结束. 一个简单的例子,在网页里显示1 ...
- $.ajax 中的contentType
$.ajax 中的contentType 在 cnodejs.org 论坛中有一个问题,让我也很奇怪,说是 $.ajax 设置数据类型 applicaiton/json之后,服务器端(express) ...