【题解】

用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?的更多相关文章

  1. POJ-3635 Full Tank? (记忆化广搜)

    Description After going through the receipts from your car trip through Europe this summer, you real ...

  2. POJ3635 Full Tank?(DP + Dijkstra)

    题目大概说,一辆带有一个容量有限的油箱的车子在一张图上行驶,每行驶一单位长度消耗一单位油,图上的每个点都可以加油,不过都有各自的单位费用,问从起点驾驶到终点的最少花费是多少? 这题自然想到图上DP,通 ...

  3. POJ3635 Full Tank?【Dijkstra+DP】

    题意: n个城市之间有m条双向路.每条路要耗费一定的油量.每个城市的油价是固定并且已经给出的.有q个询问,表示从城市s走到e,油箱的容量为c,求最便宜的方案. 思路: 用Dijkstra+Heap即可 ...

  4. POJ3635 Full Tank? 优先队列BFS or 分层图最短路 or DP?

    然而我也不知道这是啥啊...反正差不多...哪位大佬给区分一下QWQ.. 好的,我把堆的<写反了..又调了一个小时..你能不能稳一点.... 记录状态:所在位置u,油量c,花费w 扩展状态: 1 ...

  5. poj3635 FULL tank(TLE) 有限制的最短路(BFS搜索)。

    用的BFS+优先队列+二进制压缩状态判重+链式前向星, TLE,好像有人这样过了...好像要用A*算法,还不太会,所以暂时放弃.但是也学会了很多,学习了链式前向星,更深理解了BFS求最优的时候,什么时 ...

  6. poj练习题的方法

    poj1010--邮票问题 DFSpoj1011--Sticks dfs + 剪枝poj1020--拼蛋糕poj1054--The Troublesome Frogpoj1062--昂贵的聘礼poj1 ...

  7. 【POJ3635】Full Tank 优先队列BFS

    普通BFS:每个状态只访问一次,第一次入队时即为该状态对应的最优解. 优先队列BFS:每个状态可能被更新多次,入队多次,但是只会扩展一次,每次出队时即为改状态对应的最优解. 且对于优先队列BFS来说, ...

  8. [ASE]项目介绍及项目跟进——TANK BATTLE·INFINITE

    童年的记忆,大概是每周末和小伙伴们围坐在电视机前,在20来寸的电视机屏幕里守卫着这个至今都不知道是什么的白色大鸟. 当年被打爆的坦克数量估计也能绕地球个三两圈了吧. 十几年过去了,游戏从2D-3D,画 ...

  9. poj3635Full Tank?[分层图最短路]

    Full Tank? Time Limit: 1000MS   Memory Limit: 65536K Total Submissions: 7248   Accepted: 2338 Descri ...

随机推荐

  1. 项目中更新pip 问题。更新后还是老版本

    (venv) E:\renyuwang\venv\Scripts>python -m pip install --upgrade pipRequirement already up-to-dat ...

  2. 使用dynamic和MEF实现轻量级的AOP组件 ---- 系列文章

      .NET 4 实践 - 使用dynamic 和MEF实现轻量级的AOP组件(1)   .NET 4 实践 - 使用dynamic和MEF实现轻量级的AOP组件 (2) .NET 4 实践 - 使用 ...

  3. wpf学习

    http://www.jikexueyuan.com/course/1231_3.html?ss=1 WPF入门教程系列二——Application介绍 http://www.cnblogs.com/ ...

  4. BTrace学习总结

    一.简介: 在生产环境中经常遇到格式各样的问题,如OOM或者莫名其妙的进程死掉.一般情况下是通过修改程序,添加打印日志:然后重新发布程序来完成.然而,这不仅麻烦,而且带来很多不可控的因素.有没有一种方 ...

  5. JDK动态代理实例

    最近看<深入浅出MyBatis技术原理与实战>这本书时,里面讲到Mapper接口的内部实现是通过JDK动态代理生成实现类,联想到之前看<SPRING技术内幕>这本书里也常常提到 ...

  6. 基于SVN提交历史筛选作者并修改文件内容

    笔者最近开发的项目中,是通过SVN做为版本管理工具的,因为需要创建的文件太多,所以有许多文件是在原有文件基础上拷贝过来修改的,这里就涉及到一个问题,原有文件中注释里填的JAVA类名.作者工号.创建时间 ...

  7. nginx 学习资料

    nginx 学习资料 table th:first-of-type { width: 90px; } table th:nth-of-type(2) { } table th:nth-of-type( ...

  8. python的requests快速上手、高级用法和身份认证

    https://blog.csdn.net/qq_25134989/article/details/78800209 快速上手 迫不及待了吗?本页内容为如何入门 Requests 提供了很好的指引.其 ...

  9. 相似度与距离计算python代码实现

    #定义几种距离计算函数 #更高效的方式为把得分向量化之后使用scipy中定义的distance方法 from math import sqrt def euclidean_dis(rating1, r ...

  10. django使用session报错:no such table: django_session

    Django版本:1.11.15 使用session的代码:request.session['key'] = value 运行后报错:no such table: django_session 解决办 ...