题意:

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. SSM三大框架整合配置(Spring+SpringMVC+MyBatis)

    web.xml <?xml version="1.0" encoding="UTF-8"?> <web-app xmlns:xsi=" ...

  2. selenium之使用unittest测试框架

    # 测试角色权限管理页面功能 from selenium import webdriver from login_page import LoginPage import random, time, ...

  3. /include/caffe/common.cuh(9): error: function "atomicAdd(double *, double)" has already been defined

    https://stackoverflow.com/questions/39274472/error-function-atomicadddouble-double-has-already-been- ...

  4. codeforces 873C - Strange Game On Matrix

    题目大意:给你一个n*m的只有0和1的矩阵,找到每列第一个1的位置a[i][j],a[i][j]及其a[min(k,n-i+1][j]中1的数量,每列位置值是1的可以变为0: 解题思路:因为数据较小, ...

  5. 如何在Anaconda中实现多版本python共存

    anaconda中Python版本是3.5,因为爬虫原因,需要Python2.7版本,因此,希望能在anaconda中Python3和Python2共存. 1. 打开Anaconda Prompt,可 ...

  6. asp.net 连接SQL Server 数据库并进行相关操作

    asp.net 连接数据库,操作数据库主要需要两个类,一个是SqlConnection,一个是SqlCommand SqlConnection用于连接数据库,打开数据库,关闭数据库. 连接数据库需要特 ...

  7. BZOJ3420[POI2013]Triumphal arch&BZOJ5174[Jsoi2013]哈利波特与死亡圣器——树形DP+二分答案

    题目大意: 给一颗树,1号节点已经被染黑,其余是白的,两个人轮流操作,一开始B在1号节点,A选择k个点染黑,然后B走一步,如果B能走到A没染的节点则B胜,否则当A染完全部的点时,A胜.求能让A获胜的最 ...

  8. THUWC2018酱油记

    Day 0 今年的THUWC在我们学校,听说有pretest,感觉有不好的预感.... Day 1 早上7:00在校门口集合,车7:30以后才到,感觉就像在围观 期末考试.来到雅礼洋湖,在这里看到了初 ...

  9. CRM 2013 生成自动编号

    1. 建立二个实体: 单据规则: 用于创建单据的规则 规则流水号: 用于记录当前的流水号   2. 创建规则: 创建一条相关的记录后,就会显示对应的流水号:   最终效果:

  10. source、sh、bash

    source.sh.bash../ 执行脚本的区别 1.source命令用法: source FileName 作用:在当前bash环境下读取并执行FileName中的命令.该filename文件可以 ...