题目描述

城市中有R条有向马路,n个马路连接点,通过每条马路都要花去一定费用。你现在在编号为1的连接点 ,手里有k元钱,要去n号连接点的最短路径的长度是多少?途中经过道路的花费不能超过k。注意:两个 马路连接点间可能有多条马路

输入格式

第一行,k(0 <= K <= 10000)

第二行,n(2 <= N <= 100)

第三行,R(1 <= R <= 10000)

以下R行

x y L t 从x到y的马路,长度L(1<=每条马路的长度<=100),花费t(0<=每条马路的费用<=100)

输出格式

满足条件最短路长度


很裸的二维最短路题。

不同于普通最短路的地方是,这里多了一维限制——花费不能超过k。在这个前提下,需要路径最短。

首先,题目并不要求花费最少。所以我们只需要不超过k即可。那么我们在松弛时,只需要判断花费不超过k即可。时间复杂度还是O((N+M)log(N+M))

#include<iostream>
#include<cstring>
#include<cstdio>
#include<queue>
#define maxn 101
#define maxm 10001
using namespace std; struct edge{
int to,dis,c,next;
edge(){}
edge(const int &_to,const int &_dis,const int &_c,const int &_next){ to=_to,dis=_dis,c=_c,next=_next; }
}e[maxm];
int head[maxn],k;
struct node{
int now,dis,cost;
node(){}
node(const int &_now,const int &_dis,const int &_cost){ now=_now,dis=_dis,cost=_cost; }
bool operator<(const node &x)const{ return dis>x.dis; }
};
priority_queue<node> q;
int n,m,w,ans; inline int read(){
register int x(0),f(1); register char c(getchar());
while(c<'0'||'9'<c){ if(c=='-') f=-1; c=getchar(); }
while('0'<=c&&c<='9') x=(x<<1)+(x<<3)+(c^48),c=getchar();
return x*f;
} inline void dijkstra(){
q.push(node(1,0,0));
while(q.size()){
int u=q.top().now,d=q.top().dis,c=q.top().cost; q.pop();
if(u==n){ ans=d; return; }
for(register int i=head[u];~i;i=e[i].next){
int v=e[i].to;
if(c+e[i].c<=w) q.push(node(v,d+e[i].dis,c+e[i].c));
}
}
} int main(){
int t=read();
while(t--){
memset(head,-1,sizeof head),k=0,ans=-1;
while(q.size()) q.pop();
w=read(),n=read(),m=read();
for(register int i=1;i<=m;i++){
int u=read(),v=read(),w=read(),c=read();
e[k]=edge(v,w,c,head[u]),head[u]=k++;
}
dijkstra();
printf("%d\n",ans);
}
return 0;
}

SP338 ROADS的更多相关文章

  1. 洛谷 SP338 ROADS - Roads 题解

    思路 dfs(只不过要用邻接表存)邻接表是由表头结点和表结点两部分组成,其中表头结点存储图的各顶点,表结点用单向链表存储表头结点所对应顶点的相邻顶点(也就是表示了图的边).在有向图里表示表头结点指向其 ...

  2. poj 1251 Jungle Roads (最小生成树)

    poj   1251  Jungle Roads  (最小生成树) Link: http://poj.org/problem?id=1251 Jungle Roads Time Limit: 1000 ...

  3. Jungle Roads[HDU1301]

    Jungle Roads Time Limit: 2000/1000 MS (Java/Others)    Memory Limit: 65536/32768 K (Java/Others)Tota ...

  4. POJ1947 Rebuilding Roads[树形背包]

    Rebuilding Roads Time Limit: 1000MS   Memory Limit: 30000K Total Submissions: 11495   Accepted: 5276 ...

  5. Constructing Roads——F

    F. Constructing Roads There are N villages, which are numbered from 1 to N, and you should build som ...

  6. Constructing Roads In JGShining's Kingdom(HDU1025)(LCS序列的变行)

    Constructing Roads In JGShining's Kingdom  HDU1025 题目主要理解要用LCS进行求解! 并且一般的求法会超时!!要用二分!!! 最后蛋疼的是输出格式的注 ...

  7. 【CodeForces 567E】President and Roads(最短路)

    Description Berland has n cities, the capital is located in city s, and the historic home town of th ...

  8. POJ 1947 Rebuilding Roads

    树形DP..... Rebuilding Roads Time Limit: 1000MS Memory Limit: 30000K Total Submissions: 8188 Accepted: ...

  9. poj 1724:ROADS(DFS + 剪枝)

    ROADS Time Limit: 1000MS   Memory Limit: 65536K Total Submissions: 10777   Accepted: 3961 Descriptio ...

随机推荐

  1. Eureka系列(六) TimedSupervisorTask类解析

      为什么要单独讲解TimedSupervisorTask这个类呢?因为这个类在我们DiscoveryClient类的initScheduledTasks方法进行定时任务初始化时被使用得比较多,所以我 ...

  2. Python高级语法-私有属性-魔法属性(4.7.2)

    @ 目录 1.说明 2.代码 关于作者 1.说明 常用的一些魔法方法如下 所谓魔法方法,就是调用的时候 不好好正常调用 2.代码 class Test: """ 我是__ ...

  3. 技术基础 | 改进版的Apache Cassandra客户端请求路由

    最近我们在客户端的驱动程序中引入了一些变更,这些变更会影响传入的请求在Apache Cassandra集群内的分发方式.   新的默认负载均衡算法即将随驱动程序推出,这些算法将有助于缩短长尾延迟,并提 ...

  4. Spring框架之spring-web http源码完全解析

    Spring框架之spring-web http源码完全解析 Spring-web是Spring webMVC的基础,由http.remoting.web三部分组成. http:封装了http协议中的 ...

  5. Python机器学习课程:线性回归算法

    本文的文字及图片来源于网络,仅供学习.交流使用,不具有任何商业用途,如有问题请及时联系我们以作处理 最基本的机器学习算法必须是具有单个变量的线性回归算法.如今,可用的高级机器学习算法,库和技术如此之多 ...

  6. 30G 上亿数据的超大文件,如何快速导入生产环境?

    Hello,大家好,我是楼下小黑哥~ 如果给你一个包含一亿行数据的超大文件,让你在一周之内将数据转化导入生产数据库,你会如何操作? 上面的问题其实是小黑哥前段时间接到一个真实的业务需求,将一个老系统历 ...

  7. HCIP --- MPLS BGP 实验

    实验要求: 实验拓扑: 一.配置IP地址 二.给AS 2配置OSPF 1.R2-R7配置相同: 查看路由表: 可以看到,业务网段学的是32位的 修改:在R2-R7上都修改 [R2]int loo1[R ...

  8. [.NET] - 初步认识AutoMapper

    初步认识AutoMapper AutoMapper 初步认识AutoMapper 前言 手动映射 使用AutoMapper 创建映射 Conventions 映射到一个已存在的实例对象   前言 通常 ...

  9. 【进程/作业】篇章一:Linux进程及其管理(进程的管理基础)

    概述:监控系统各方面的性能,保障各类服务的有序运行,是运维工作的重要组成部分,本篇就介绍一次常用的系统监控命令和相关的参数说明 具体包含以下几部分: 1.进程的管理基础 ,主要是讲一下概念性的东西 2 ...

  10. Spring-IOC基本使用

    通过上篇文章大概知道ioc.DI的概念了,下面我们详细介绍一下 一.Spring IOC创建对象 IOC通过上文的介绍作用是控制创建对象的解释权,我们把代码重新看一下 //User.java publ ...