POJ3635 Full Tank?


【题解】
用dijkstra算法求最短路。同时考虑在每个节点加油(一单位)与否。dp[i][j]记录汽车到达第i个点所剩j单位油所用的费用。
【代码】
#include <iostream>
#include <map>
#include <cstring>
#include <string>
#include <queue>
using namespace std;
#define maxn 1005
#define maxm 10005 /*
* dp[i][j] denodes the least cost on the ith node
* with j oil left.
*/
int price[maxn], dp[maxn][], vis[maxn][];
int Ecnt, capacaity, sp, ep; struct Node
{
int node, cost, oil;
Node(int n, int c, int o) :
node(n), cost(c), oil(o) {}
bool operator < (const Node &N) const{
return cost > N.cost;
}
}; struct Edge
{
int node;
int len;
Edge* next;
}edges[*maxm]; Edge* head[maxn]; void init()
{
Ecnt = ;
fill(head, head + maxn, (Edge*));
} void build(int u, int v, int w)
{
edges[Ecnt].node = u;
edges[Ecnt].len = w;
edges[Ecnt].next = head[v];
head[v] = edges + Ecnt++; edges[Ecnt].node = v;
edges[Ecnt].len = w;
edges[Ecnt].next = head[u];
head[u] = edges + Ecnt++;
} void dijkstra()
{
memset(vis, , sizeof(vis));
memset(dp, , sizeof(dp));
priority_queue<Node> pq;
pq.push(Node(sp, , ));
dp[sp][] = ;
while (!pq.empty()) {
Node np = pq.top();
pq.pop();
int n = np.node, c = np.cost, o = np.oil;
vis[n][o] = ;
if (n == ep) {
printf("%d\n", c);
return;
}
/* decide to add oil or not */
if (o + <= capacaity && !vis[n][o + ] && dp[n][o] + price[n] < dp[n][o + ]) {
dp[n][o + ] = dp[n][o] + price[n];
pq.push(Node(n, dp[n][o + ], o + ));
}
/* drive to the next node */
for (Edge *Ep = head[n]; Ep; Ep = Ep->next) {
int N = Ep->node, Len = Ep->len;
if (o >= Len && !vis[N][o - Len] && c < dp[N][o - Len]) {
dp[N][o - Len] = c;
pq.push(Node(N, dp[N][o - Len], o - Len));
}
}
}
printf("impossible\n");
return;
} int main()
{
int city_n, road_m, queries;
cin >> city_n >> road_m;
init();
for (int i = ; i < city_n; i++)
cin >> price[i];
for (int i = ; i < road_m; i++) {
int u, v, d;
cin >> u >> v >> d;
build(u, v, d);
}
cin >> queries;
for (int i = ; i < queries; i++) {
cin >> capacaity >> sp >> ep;
dijkstra();
}
//system("pause");
return ;
}
POJ3635 Full Tank?的更多相关文章
- POJ-3635 Full Tank? (记忆化广搜)
Description After going through the receipts from your car trip through Europe this summer, you real ...
- POJ3635 Full Tank?(DP + Dijkstra)
题目大概说,一辆带有一个容量有限的油箱的车子在一张图上行驶,每行驶一单位长度消耗一单位油,图上的每个点都可以加油,不过都有各自的单位费用,问从起点驾驶到终点的最少花费是多少? 这题自然想到图上DP,通 ...
- POJ3635 Full Tank?【Dijkstra+DP】
题意: n个城市之间有m条双向路.每条路要耗费一定的油量.每个城市的油价是固定并且已经给出的.有q个询问,表示从城市s走到e,油箱的容量为c,求最便宜的方案. 思路: 用Dijkstra+Heap即可 ...
- POJ3635 Full Tank? 优先队列BFS or 分层图最短路 or DP?
然而我也不知道这是啥啊...反正差不多...哪位大佬给区分一下QWQ.. 好的,我把堆的<写反了..又调了一个小时..你能不能稳一点.... 记录状态:所在位置u,油量c,花费w 扩展状态: 1 ...
- poj3635 FULL tank(TLE) 有限制的最短路(BFS搜索)。
用的BFS+优先队列+二进制压缩状态判重+链式前向星, TLE,好像有人这样过了...好像要用A*算法,还不太会,所以暂时放弃.但是也学会了很多,学习了链式前向星,更深理解了BFS求最优的时候,什么时 ...
- poj练习题的方法
poj1010--邮票问题 DFSpoj1011--Sticks dfs + 剪枝poj1020--拼蛋糕poj1054--The Troublesome Frogpoj1062--昂贵的聘礼poj1 ...
- 【POJ3635】Full Tank 优先队列BFS
普通BFS:每个状态只访问一次,第一次入队时即为该状态对应的最优解. 优先队列BFS:每个状态可能被更新多次,入队多次,但是只会扩展一次,每次出队时即为改状态对应的最优解. 且对于优先队列BFS来说, ...
- [ASE]项目介绍及项目跟进——TANK BATTLE·INFINITE
童年的记忆,大概是每周末和小伙伴们围坐在电视机前,在20来寸的电视机屏幕里守卫着这个至今都不知道是什么的白色大鸟. 当年被打爆的坦克数量估计也能绕地球个三两圈了吧. 十几年过去了,游戏从2D-3D,画 ...
- poj3635Full Tank?[分层图最短路]
Full Tank? Time Limit: 1000MS Memory Limit: 65536K Total Submissions: 7248 Accepted: 2338 Descri ...
随机推荐
- MySQL--查看内存信息
常见查看内存信息命令 ## 使用free -m命令查看 free -m ## 使用cat /proc/meminfo 查看 cat /proc/meminfo ## 使用dmidecode命令查看 d ...
- replicatedhq-ship 基于Kustomize 项目的快速kubernetes 应用部署工具
replicatedhq-ship 是对Kustomize 项目的扩展,我们可以用它来快速的进行三方应用的管理部署, 可以和helm,kubernetes 清单文件,knative 集成,我们可以方便 ...
- CentOS6.5下安装Apache2.4+PHP7
CentOS6.5下安装Apache2.4+PHP7 http://blog.csdn.net/along602/article/details/42695779 http://www.th7.cn/ ...
- 深入详解美团点评CAT跨语言服务监控(七)消息分析器与报表(二)
CrossAnalyzer-调用链分析 在分布式环境中,应用是运行在独立的进程中的,有可能是不同的机器,或者不同的服务器进程.那么他们如果想要彼此联系在一起,形成一个调用链,在Cat中,CrossAn ...
- MySQL中视图
视图是指计算机数据库中的视图,是一个虚拟表,其内容由查询定义.同真实的表一样,视图包含一系列带有名称的列和行数据.但是,视图并不在数据库中以存储的数据值集形式存在.行和列数据来自由定义视图的查询所引用 ...
- Visual Studio Code 使用
VS Code 快捷键: 快捷键 作用 Option+Up 或 Option+Down 上下移动一行 Shift+Option+Up 或 Shift+Option+Down 向上向下复制一行 VS C ...
- CentOS7局域网下安装离线Ambari
1 Ambari介绍.安装与应用案例介绍 1.1 Ambari Ambari 跟 Hadoop 等开源软件一样,也是 Apache Software Foundation 中的一个项目,并且是顶级项目 ...
- VMware Ubuntu配置虚拟机和主机互相ping通
安装VMware后,主机会有两个虚拟网卡: vmnet1和vmnet8是两个虚拟网卡,主要作用是让虚拟机可以通过你的宿主机的网线上网.注意:如果有“!”,说明不能用. vmnet1是为host-on ...
- 一文说尽 MySQL 优化原理
说起MySQL的查询优化,相信大家收藏了一堆奇技淫巧:不能使用SELECT *.不使用NULL字段.合理创建索引.为字段选择合适的数据类型..... 你是否真的理解这些优化技巧?是否理解其背后的工作原 ...
- Windows下利用TortoiseSVN搭建本地SVN服务器
写在前面: 安装TortoiseSVN时,图中这步要选择,才能同时安装后面需要的svnserve.exe 环境说明: Win 7 TortoiseSVN 1.7 搭建步骤: 0. 新建一个目录,做&q ...