题意:

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

思路:

用Dijkstra+Heap即可求有环的动态规划.

代码:

#include <cstdio>
#include <cstring>
#include <queue> using namespace std; const int N = , M = , inf = 0x7f7f7f7f;
int h[N], p[M], v[M], w[M], c[N], cnt = ;
int dp[N][], vis[N][], s, t, cap; struct Data
{
int x, o, c;
}; bool operator <(Data a, Data b)
{
return a.c>b.c;
} void add(int x, int y, int z)
{
p[++cnt] = h[x]; w[cnt] = z; v[cnt] = y; h[x] = cnt;
} int dij()
{
priority_queue<Data> q;
memset(dp, , sizeof dp);
memset(vis, , sizeof vis);
dp[s][] = ;
q.push((Data) { s, });
while (!q.empty())
{
Data u = q.top();
q.pop();
vis[u.x][u.o] = ;
if (u.x == t) return u.c;
if (u.o < cap && !vis[u.x][u.o + ] &&
dp[u.x][u.o + ] > dp[u.x][u.o] + c[u.x])
{
dp[u.x][u.o + ] = dp[u.x][u.o] + c[u.x];
q.push((Data) {u.x, u.o + , dp[u.x][u.o + ]});
}
for (int i = h[u.x]; i; i = p[i])
if (u.o >= w[i] && !vis[v[i]][u.o - w[i]] && dp[v[i]][u.o - w[i]] > dp[u.x][u.o])
{
dp[v[i]][u.o - w[i]] = dp[u.x][u.o];
q.push((Data) {v[i], u.o - w[i], dp[v[i]][u.o - w[i]]});
}
}
return -;
} int main()
{
int n, i, m, q;
scanf("%d%d", &n, &m);
for(i=;i<n;i++)
scanf("%d", c + i);
while (m--)
{
scanf("%d%d%d", &s, &t, &cap);
add(s, t, cap);
add(t, s, cap);
}
scanf("%d", &q);
while (q--)
{
scanf("%d%d%d", &cap, &s, &t);
int re = dij();
if (re == -) puts("impossible");
else printf("%d\n", re);
}
return ;
}

POJ3635 Full Tank?【Dijkstra+DP】的更多相关文章

  1. 【期望DP】

    [总览] [期望dp] 求解达到某一目标的期望花费:因为最终的花费无从知晓(不可能从$\infty$推起),所以期望dp需要倒序求解. 设$f[i][j]$表示在$(i, j)$这个状态实现目标的期望 ...

  2. 【期望dp】绵羊跳弹簧

    [期望dp] 绵羊跳弹簧 >>>>题目 [题目] T 组数据.对于每一组数据,有n+1 个格子从0 到n 标号,绵羊从0 号结点开始,每次若在 x 位置掷骰子,令掷出的数为nu ...

  3. Kattis - bank 【简单DP】

    Kattis - bank [简单DP] Description Oliver is a manager of a bank near KTH and wants to close soon. The ...

  4. poj1322 Chocolate 【 概率DP 】

    题目链接:poj1322 Chocolate [概率DP ] 题意:袋中有C种颜色巧克力,每次从其中拿出一块放桌上,如果桌上有两块相同颜色巧克力则吃掉,问取出N块巧克力后,求桌上正好剩下M块巧克力的概 ...

  5. HDOJ 1501 Zipper 【简单DP】

    HDOJ 1501 Zipper [简单DP] Problem Description Given three strings, you are to determine whether the th ...

  6. 蓝桥 ADV-232 算法提高 矩阵乘法 【区间DP】

      算法提高 矩阵乘法   时间限制:3.0s   内存限制:256.0MB      问题描述 有n个矩阵,大小分别为a0*a1, a1*a2, a2*a3, ..., a[n-1]*a[n],现要 ...

  7. Vijos 1523 贪吃的九头龙 【树形DP】

    贪吃的九头龙 背景 安徽省芜湖市第二十七中学测试题 NOI 2002 贪吃的九头龙(dragon) Description:OfficialData:OfficialProgram:Converted ...

  8. Vijos 1144 小胖守皇宫 【树形DP】

    小胖守皇宫 描述 huyichen世子事件后,xuzhenyi成了皇上特聘的御前一品侍卫. 皇宫以午门为起点,直到后宫嫔妃们的寝宫,呈一棵树的形状:某些宫殿间可以互相望见.大内保卫森严,三步一岗,五步 ...

  9. Vijos 1565 多边形 【区间DP】

    描述 zgx给了你一个n边的多边形,这个多边形每个顶点赋予一个值,每条边都被标上运算符号+或*,对于这个多边形有一个游戏,游戏的步骤如下:(1)第一步,删掉一条边:(2)接下来n-1步,每步对剩下的边 ...

随机推荐

  1. 在DBGrid中,单击单元格选择整行,双击又可编辑单元格

    在设计过程中,有时候数据较大量,field 较多的时候,只是点击单元格可能会对某个field的数据误操作(如数据错行),为此才会想到这个问题,解决办法如下:点击单元格就改当前行颜色. 首先DBGRID ...

  2. BZOJ3028 食物(生成函数)

    显然构造出生成函数:则有f(x)=(1+x2+x4+……)·(1+x)·(1+x+x2)·(x+x3+x5+……)·(1+x4+x8+……)·(1+x+x2+x3)·(1+x)·(1+x3+x6+…… ...

  3. MT【40】一道联赛二试题

    让我通过这道题来演示如何利用切比雪夫多项式的内功心法: 评:如此大道至简,当年为之叫绝的精彩的做法

  4. android 使用广播 接收和拦截 android系统短信

    package com.app.sms_broadcastreceiver; import android.app.Activity; import android.content.Broadcast ...

  5. elasticsearch 安装、配置

    elasticsearch:基于java开发,基于RESTful web 接口,提供分布式多用户能力的全文搜索引擎. elasticsearch 安装: 1. java SE Development ...

  6. Office2016自定义安装

    Office2016已经不提供自定义安装功能,而采用C2R安装方式.使用镜像安装时,默认全部安装.想要自定义安装就需要用到微软提供的Office2016部署工具. 步骤 下载并运行微软提供的Offic ...

  7. c 的内存分配与释放原则: 通常应遵循“谁malloc,谁free”的原则。

    通常应遵循“谁malloc,谁free”的原则. ------------------------   一位大神的话. 2013-02-09

  8. DOM表格操作

    注意:就算代码中不包含<tbody>标签,浏览器解析时也可能会自动添加,因此需要注意子元素的选择 表格操作用到的属性: 1.tHead 2.tBodies 3.tFoot 更为细致的有: ...

  9. Hadoop+HBase+Spark+Hive环境搭建

    杨赟快跑 简书作者 2018-09-24 10:24 打开App 摘要:大数据门槛较高,仅仅环境的搭建可能就要耗费我们大量的精力,本文总结了作者是如何搭建大数据环境的(单机版和集群版),希望能帮助学弟 ...

  10. pycharm git无法使用问题(待解决)

    PyCharm 2017.3.1 (Community Edition)Build #PC-173.3942.36, built on December 14, 2017JRE: 1.8.0_152- ...