poj 1724 有限制的最短距离(优先队列+链表)
题目链接:http://poj.org/problem?id=1724
题目大意:给你一个最大费用,让你在费用容许的范围内(情况下)求有源点到终点的最短距离,也就是一般的单源最小距离,不同之处在于加了费用限制。用现有的求最短距离的的方法是不可能解的。我们都知道,求最短距离的实质就是贪心(到达同样的点是所花的费用或者距离最少)我们可以这样使用优先队列,让只要到达某个点所花的费用总和小于给定的费用的所有顶点都进队列,这样每次让距离最小的出队列,如果出队列的是终点则此时的最小距离就是最费用的范围内的最短距离。
近来做题一直困惑的不是 题不会做或者没思路而是以前不习惯用邻接表,一直没用过,而这几道题呢,最终发现这几道题WA都是有重边的而且重边不能舍弃(或取最小的)因为图是有向图且要求k短路或者有限制的最短路,这些都要考虑的。没办法决定试着写下没想到这么快一直超时的变成了0ms,看来以后.............
1 #include<iostream> 2 #include<queue> 3 #include<cstring> 4 #include<cstdio> 5 const int INF=10000; 6 using namespace std; 7 struct ss{ 8 int v,len,value,next; 9 }map[10005];10 int head[105];11 struct tt{12 int x,y,z;13 friend bool operator <(tt s,tt t)14 {15 return s.x>t.x;16 }17 };18 int n,m,v,sum;19 int Dijkstra()20 {21 int i,flag=0;22 tt p,q;23 priority_queue<tt>Q;24 p.x=0,p.y=0,p.z=1;25 Q.push(p);26 while (!Q.empty())27 {28 p=Q.top();29 Q.pop();30 if(p.z==n){31 sum=p.x;32 flag=1;33 break;34 }35 for (i=head[p.z];i;i=map[i].next)36 if(map[i].value+p.y<=v)37 {38 q.x=p.x+map[i].len;39 q.y=map[i].value+p.y;40 q.z=map[i].v;41 Q.push(q);42 }43 }44 if(flag)return 1;45 return 0;46 }47 int main()48 {49 int i,x,y,z,w,N;50 sum=0;51 N=1;52 scanf("%d%d%d",&v,&n,&m);53 for (i=1;i<=m;i++)54 {55 scanf("%d%d%d%d",&x,&y,&z,&w);56 if(x==y) continue;57 map[N].v=y;58 map[N].len=z;59 map[N].value=w;60 map[N].next=head[x];61 head[x]=N++;62 }63 if(Dijkstra())printf("%d\n",sum);64 else printf("-1\n");65 return 0;66 }
转载于:https://www.cnblogs.com/zhaoguanqin/archive/2011/08/24/2151542.html
poj 1724 有限制的最短距离(优先队列+链表)相关推荐
- ROADS POJ - 1724(限制条件的最短路)【邻接表+深搜】
思路:先说下题意,题意第一行给了一个k,代表你有k的钱数,下一行有一个n,代表n个点,然后一个m,代表m条边,然后接下来m行,每行有四个数,分别代表起点.终点.路径长度和要花费的钱数,题目想问在花的钱 ...
- POJ 1724 二维费用最短路
题目大意: 有N个城市,编号1-N 有R条路,每条路(单向)的起点为Si,终点为Di,长度为Li,如果要走这条路需要花Ti的钱 现在你只有K元钱,求在不超支的前提下,从1走到N需要的最短距离 这里总是 ...
- ROADS POJ - 1724(最短路+邻接表+dfs)
题意: N个城市,编号1到N.城市间有R条单向道路.有长度和过路费两个属性.Bob只有K块钱,他想从城市1走到城市N.问最短共需要走多长的路.如果到不了N,输出-1. 题目: N cities nam ...
- 【POJ - 1724 】ROADS (带限制的最短路 或 dfs 或 A*算法,双权值)
题干: N cities named with numbers 1 ... N are connected with one-way roads. Each road has two paramete ...
- POJ 1724 ROADS(bfs最短路)
n个点m条边的有向图,每条边有距离跟花费两个参数,求1->n花费在K以内的最短路. 直接优先队列bfs暴力搞就行了,100*10000个状态而已.节点扩充的时候,dp[i][j]表示到达第i点花 ...
- 块状链表(附NOI 2003 Editor,POJ 2131 Key Insertion)
这两天学习了一下块状链表,也谈不上学习,可以说是练习.因为块状链表这种东西,猛一听起来好像很高端,但是拆开来说就是:分块+链表.根本上就是暴力,就是分块.只不过"分"的对象从数组变 ...
- 一步一步深入理解Dijkstra算法
先简单介绍一下最短路径: 最短路径是啥?就是一个带边值的图中从某一个顶点到另外一个顶点的最短路径. 官方定义:对于内网图而言,最短路径是指两顶点之间经过的边上权值之和最小的路径. 并且我们称路径上的第 ...
- ACM题集以及各种总结大全(转)
ACM题集以及各种总结大全! 虽然退役了,但是整理一下,供小弟小妹们以后切题方便一些,但由于近来考试太多,顾退役总结延迟一段时间再写!先写一下各种分类和题集,欢迎各位大牛路过指正. 一.ACM入门 关 ...
- 最短路算法详解(Dijkstra/SPFA/Floyd)
转自:http://blog.csdn.net/murmured/article/details/19281031 一.Dijkstra Dijkstra单源最短路算法,即计算从起点出发到每个点的最短 ...
最新文章
- Java并发之ReentrantLock锁
- remote_port java_Java HttpServletRequest.getRemotePort方法代碼示例
- 随机模拟【1】:随机模拟的研究范围与特征
- Grafana + Zabbix --- 部署分布式监控系统
- 个人作业1-数组(续1)
- PyCharm使用技巧(六):Regullar Expressions的使用
- Python用subprocess的Popen来调用系统命令
- Cake Frosting:更具可维护性的C#DevOps
- OpenCV人脸识别
- 悉尼大学计算机专业本科学费,悉尼大学
- C语言ALG什么文件,alg.exe是什么进程文件?如何删除alg病毒?
- 计算机如何添加gust用户,win7系统如何创建安全的Guest账户
- centos 下mono安装
- IE下载文件时,中文文件名乱码问题
- 命令查看yarn当前任务列表
- TypeScript学习-类class
- python语音验证码识别_基于Python的手机语音验证码api调用代码实例
- QUAKE 3源代码评测:架构
- 前端网络基础 - 跨域xhr/fetch
- 软件测试方法大全,49种测试方法,你知道几个?
热门文章
- PHP编译参数 --prefix=/usr/local/php 的“深远”影响
- 决策树分类算法matlab,matlab实现的C45分类决策树算法
- C语言学习笔记---断言函数assert()
- SpringBoot中静态资源和首页定制
- 【车牌识别】+【模板匹配】基于智能交通的车牌识别系统
- 一些用于拥挤场景的异常检测的视频数据集
- maven中plugins和pluginmanagement的区别
- 仿 vue-cli 搭建属于自己的脚手架
- LeetCode-8-String to Integer (atoi)
- 一行代码就能解决微服务分布式事务问题,你知道GTS怎么做到的吗?