openjudge roads
2015-12-18 20:46
309 查看
726:ROADS
查看提交
统计
提问
总时间限制: 1000ms 内存限制: 65536kB
描述N cities named with numbers 1 ... N are connected with one-way roads. Each road has two parameters associated with it : the road length and the toll that needs to be paid for the road (expressed in the number of coins).
Bob and Alice used to live in the city 1. After noticing that Alice was cheating in the card game they liked to play, Bob broke up with her and decided to move away - to the city N. He wants to get there as quickly as possible, but he is short on cash.
We want to help Bob to find the shortest path from the city 1 to the city N that he can afford with the amount of money he has.
输入The first line of the input contains the integer K, 0 <= K <= 10000, maximum number of coins that Bob can spend on his way.
The second line contains the integer N, 2 <= N <= 100, the total number of cities.
The third line contains the integer R, 1 <= R <= 10000, the total number of roads.
Each of the following R lines describes one road by specifying integers S, D, L and T separated by single blank characters :
S is the source city, 1 <= S <= N
D is the destination city, 1 <= D <= N
L is the road length, 1 <= L <= 100
T is the toll (expressed in the number of coins), 0 <= T <=100
Notice that different roads may have the same source and destination cities.
输出The first and the only line of the output should contain the total length of the shortest path from the city 1 to the city N whose total toll is less than or equal K coins.
If such path does not exist, only number -1 should be written to the output.
样例输入
5 6 7 1 2 2 3 2 4 3 3 3 4 2 4 1 3 4 1 4 6 2 1 3 5 2 0 5 4 3 2
样例输出
11
来源
题目大意:求城市1到城市n在满足路费不超过K的前提下的最短路。注意路是单向的。
CEOI 1998
#include<iostream>
#include<cstdio>
#include<cstring>
#include<queue>
using namespace std;
int money,n,m,i,j,num;
struct data
{
int t,l,x;
bool operator<(const data&a)const
{
return a.l<l;
}
};
priority_queue<data> p;
int next[100000],u[100000],v[100000],len[100000],ti[100000],point[2000];
void chuli(int a,int b,int c,int d)
{
num++; u[num]=a; v[num]=b; len[num]=c; ti[num]=d; next[num]=point[a]; point[a]=num;
}
int main()
{
scanf("%d",&money);
scanf("%d%d",&n,&m);
for (i=1;i<=m;i++)
{
int a,b,c,d; scanf("%d%d%d%d",&a,&b,&c,&d);
chuli(a,b,c,d);
}
data l;
l.x=1; l.t=0;l.l=0; p.push(l);
int ans=1000000000;
while (!p.empty())
{
data l=p.top(); p.pop();
int now=l.x; int mp=point[now];
if (l.x==n)
{
printf("%d",l.l);
return 0;
}
while (mp!=0)
{
if (l.t+ti[mp]<=money)
{
data k; k.x=v[mp]; k.l=l.l+len[mp]; k.t=l.t+ti[mp];
p.push(k);
}
mp=next[mp];
}
}
printf("-1");
}
相关文章推荐
- ~/.bashrc和/etc/profile的異同
- 【Modern OpenGL】前言
- Hadoop的几点优点
- 在vmware中用kdb调试linux内核和模块
- OS及Linux基础知识
- caffe调用已生成的模型,测试(Linux)
- tomcat7,no JDK found - please set JAVA_HOME
- Hadoop版本变迁
- ubuntu14.04中安装opencv2.4.9
- 为什么在linux的命令行中cd .. 能返回上层目录
- linux学习笔记(14)命令行下截屏scrot
- 分布式计算,大型网站技术架构:核心原理与案例分析
- 分布式计算,大型网站技术架构:核心原理与案例分析
- 分布式计算,大型网站技术架构:核心原理与案例分析
- Apache Hadoop新版本的特性
- linux打开文件数量的查看方法
- centos6.5 安装 MySQL5.7
- Invalid standard action 错误
- Hadoop 产生背景
- linux学习笔记(13)终端清屏