博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
poj 1742 roads
阅读量:5971 次
发布时间:2019-06-19

本文共 3247 字,大约阅读时间需要 10 分钟。

hot3.png

/*C: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.样例输入5671 2 2 32 4 3 33 4 2 41 3 4 14 6 2 13 5 2 05 4 3 2样例输出    11*/#include 
#include
#include
#include
#include
#include
using namespace std;int k = 0, cityn = 0, roadn = 0;int mi = 2000000000;int cos = 0, di = 0;bool v[105] = {0};struct road{ int s; int d; int l; int t;};road r[10005];vector
nu[105][105];void move(int n){ if(cos > k) { return; } if(di >= mi) { return; } if(n == cityn) { if(cos <= k) { int tep = di; if(tep < mi) mi = tep; } return; } for(int i = cityn; i >= 1; --i) { if(!v[i] && !nu[n][i].empty())//linknum[n][i]) { for(vector
::iterator k = nu[n][i].begin(); k != nu[n][i].end(); k++) { v[i] = 1; cos += k->t; di += k->l; move(i); di -= k->l; cos -= k->t; v[i] = 0; } } } return;}int mycp( const road &a, const road &b ){ if( a.l < b.l ) return 1; else if( a.l == b.l ) { if( a.t < b.t ) return 1; else return 0; } else return 0;}int main(){ scanf("%d%d%d", &k, &cityn, &roadn); for(int i = 1; i <= roadn; ++i) { scanf("%d%d%d%d", &r[i].s, &r[i].d, &r[i].l, &r[i].t); nu[r[i].s][r[i].d].push_back(r[i]); } for(int i = 1; i <= cityn; ++i) for(int j = 1; j <= cityn; ++j) sort(nu[i][j].begin(), nu[i][j].end(), mycp); for(int i = 1; i <= cityn; ++i) for(int j = 1; j <= cityn; ++j) for(vector
::iterator k = nu[i][j].begin(); k != nu[i][j].end(); k++) { while(k != nu[i][j].end() - 1 && k->l <= (k+1)->l && k->t <= (k+1)->t) { nu[i][j].erase(k + 1); } } v[1] = 1; move(1); if(mi >= 1000000) mi = -1; printf("%d\n", mi); return 0;}

转载于:https://my.oschina.net/locusxt/blog/136374

你可能感兴趣的文章
【Linux】Linux 在线安装yum
查看>>
Atom 编辑器系列视频课程
查看>>
[原][osgearth]osgearthviewer读取earth文件,代码解析(earth文件读取的一帧)
查看>>
使用dotenv管理环境变量
查看>>
Vuex学习
查看>>
bootstrap - navbar
查看>>
FastDFS存储服务器部署
查看>>
Android — 创建和修改 Fragment 的方法及相关注意事项
查看>>
swift基础之_swift调用OC/OC调用swift
查看>>
ElasticSearch Client详解
查看>>
mybatis update返回值的意义
查看>>
expdp 详解及实例
查看>>
通过IP判断登录地址
查看>>
深入浅出JavaScript (五) 详解Document.write()方法
查看>>
Beta冲刺——day6
查看>>
在一个程序中调用另一个程序并且传输数据到选择屏幕执行这个程序
查看>>
代码生成工具Database2Sharp中增加视图的代码生成以及主从表界面生成功能
查看>>
关于在VS2005中编写DLL遇到 C4251 警告的解决办法
查看>>
提高信息安全意识对网络勒索病毒说不
查看>>
css+div+jquery弹出层
查看>>