uva11367 - Full Tank? 最短路 DP

我用WorkBuddy“克隆“了一个我,从此每句话像我自己说的 各位,做这件事花了多长时间?准备样本可能要半小时,提炼风格十分钟,保存固化再花十分钟。加起来不到一个小时。但这一个小时之后呢?你就拥有了一个"永远在线的文字替身"。以后写口播稿,打开WorkBuddy跟它说;写课程逐字稿,跟它说;写公众号文章,也跟它说。写出来的东西,你的学员一看——“嘿,这不就是翟猛老师说的嘛。说到这儿,可能有人会问:老师,我的风格有那么重要吗?AI写的不都挺好的吗?各位你想想看,你为什么愿意听某个老师的课?不只是因为他讲的内容好,更是因为你喜欢他讲话的方式。 阅读详情
  F: Full Tank? 

After going through the receipts from your car trip through Europe this summer, you realised that the gas prices varied between the cities you visited. Maybe you could have saved some money if you were a bit more clever about where you filled your fuel?

\epsfbox{p11367.eps}

To help other tourists (and save money yourself next time), you want to write a program for finding the cheapest way to travel between cities, filling your tank on the way. We assume that all cars use one unit of fuel per unit of distance, and start with an empty gas tank.

Input 

The first line of input gives 1$ \le$n$ \le$1000 and 0$ \le$m$ \le$10000 , the number of cities and roads. Then follows a line with n integers 1$ \le$pi$ \le$100 , where pi is the fuel price in the i th city. Then follow m lines with three integers 0$ \le$u , v < n and 1$ \le$d$ \le$100 , telling that there is a road between u and v with length d . Then comes a line with the number 1$ \le$q$ \le$100 , giving the number of queries, and q lines with three integers 1$ \le$c$ \le$100 , s and e , where c is the fuel capacity of the vehicle, s is the starting city, and e is the goal.

Output 

For each query, output the price of the cheapest trip from s to e using a car with the given capacity, or ``impossible" if there is no way of getting from s to e with the given car.

Sample Input 

5 5 
10 10 20 12 13 
0 1 9 
0 2 8 
1 2 1 
1 3 11 
2 3 7 
2 
10 0 3 
20 1 4

Sample Output 

170 
impossible

 

 

  N个点M条无向边,给你每个点的油价。Q个询问,每次询问给你油箱容量和起点终点,一单位距离花一单位油,问起点到终点最少花多少钱,不能到达输出-1。

  类似于以前马里奥那个,思路是把(u,fuel)当成一个点,就是一个二维的,在某个位置有多少油量这样一个状态当成一个点,用dijkstra,根据条件判断当前点连接的点(加一单位油或者花费油走到另一个位置,油要一单位一单位加,节省时间)。一旦到达终点就返回。

  这种题的思路是把原来的图根据二维关系状态转移的情况构成一个新图,求最短路。优先队列的dijkstra复杂度MlogN。

#include<cstdio>
#include<cstring>
#include<algorithm>
#include<string>
#include<iostream>
#include<queue>
#include<map>
using namespace std;

typedef pair<int,int> pii;

const int MAXN=1010;
const int MAXM=25;
const int MAXC=110;
const int MAXNODE=100010;
const int LOGMAXN=50;
const int INF=0x3f3f3f3f;

int N,M,Q,S,E,C;
int p[MAXN];

struct Point{
    int u,fuel,d;
    bool operator < (const Point& rhs) const{
        return d>rhs.d;
    }
};
struct Edge{
    int u,v,dist;
};

struct Dijkstra{
    int n;
    int d[MAXN][MAXC],vis[MAXN][MAXC];
    vector<int> G[MAXN];
    vector<Edge> edges;

    void init(int n){
        this->n=n;
        for(int i=0;i<n;i++) G[i].clear();
        edges.clear();
    }
    void add_edge(int u,int v,int dist){
        edges.push_back((Edge){u,v,dist});
        int m=edges.size()-1;
        G[u].push_back(m);
    }
    int dijkstra(int S,int E,int C){
        priority_queue<Point> q;
        memset(d,INF,sizeof(d));
        memset(vis,0,sizeof(vis));
        d[S][0]=0;
        q.push((Point){S,0,0});
        while(!q.empty()){
            Point tmp=q.top();
            q.pop();
            int u=tmp.u,fuel=tmp.fuel;
            if(u==E) return d[u][fuel];
            if(vis[u][fuel]) continue;
            vis[u][fuel]=1;
            if(fuel<C&&d[u][fuel]+p[u]<d[u][fuel+1]){
                d[u][fuel+1]=d[u][fuel]+p[u];
                q.push((Point){u,fuel+1,d[u][fuel+1]});
            }
            int len=G[u].size();
            for(int i=0;i<len;i++){
                Edge& e=edges[G[u][i]];
                if(fuel>=e.dist&&d[u][fuel]<d[e.v][fuel-e.dist]){
                    d[e.v][fuel-e.dist]=d[u][fuel];
                    q.push((Point){e.v,fuel-e.dist,d[e.v][fuel-e.dist]});
                }
            }
        }
        return -1;
    }
}solver;

int main(){
    freopen("in.txt","r",stdin);
    while(scanf("%d%d",&N,&M)!=EOF){
        for(int i=0;i<N;i++) scanf("%d",&p[i]);
        solver.init(N);
        int u,v,dist;
        for(int i=0;i<M;i++){
            scanf("%d%d%d",&u,&v,&dist);
            solver.add_edge(u,v,dist);
            solver.add_edge(v,u,dist);
        }
        scanf("%d",&Q);
        while(Q--){
            scanf("%d%d%d",&C,&S,&E);
            int ans=solver.dijkstra(S,E,C);
            if(ans==-1) printf("impossible\n");
            else printf("%d\n",ans);
        }
    }
    return 0;
}


 

Xilinx系FPGA学习笔记(三)Vivado的仿真及ILA使用 接着学习vivado的使用方法。 阅读详情

相关推荐

关于无障碍适配的笔记

针对无障碍兼容性的笔记,针对wcg2.0/2.1

CoffeeAndIce的博客 4211

POJ3635--Full Tank?(优先队列+最短路)

Description After going through the receipts from your car trip through Europe this summer, you realised that the gas prices varied between the cities you visited. Maybe you could have saved some

SCUT_Pein 1271

Manimgl 进阶笔记

目录 一、调整视频输出的纵横比 二、调整预览窗口的尺寸 三、在开发工具中直接调试 一、调整视频输出的纵横比 调整输出视频的纵横比,在日常开发中属于比较基本的需求。要使用 Manimgl 得到期望的分辨率的视频输出需要修改以下几个地方: 第一步:在 custom_config.yml 配置文件中通过 camera_qualities设置视频的输出分辨率。manimlib 框架已经在 default_config.yml 文件中设置了四种视频输出分辨率,default_qualities 参数.

gunnery的专栏 2856

poj3635 Full Tank? (优先队列bfs)

Full Tank? After going through the receipts from your car trip through Europe this summer, you realised that the gas prices varied between the cities you visited. Maybe you could have saved some money...

zzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzz 666

查看电脑mac地址+主机名+用户名并导出

张三:李四,应公司要求,今天下班前必须将这张表格里面用户电脑的mac地址统计出来!李四:我该怎么办呢?一个一个查看,太没有效率了吧!对了,我可以做一个bat脚本啊!

拥抱着青春 1970

信息化建设项目前期方案编制4:如何画好四张图

这里探讨以下具体的总体设计操作层面的工作。总体设计主要是完成四张图,总体架构(逻辑架构)、应用架构、网络拓扑、系统部署图。对于一些单一的系统,往往总体架构和应用架构可以合一。网络拓扑画好了,系统部署图也可以省略。有些项目还会在这之外,有所谓的技术架构图。对应用系统、数据存储等各个部分各自用的主要技术、服务等,给出总体设计图。但通常来说,这四张图在一个中等规模(200~500万,软件...

Leonardo的博客 4635

算法竞赛进阶指南——POJ-3635.Full Tank?(优先队列BFS)

poj-3635.Full Tank? Description After going through the receipts from your car trip through Europe this summer, you realised that the gas prices varied between the cities you visited. Maybe you could ...

紫藤&code的博客 932

登临科技Goldwasser加速卡Python SDK实战:从环境配置到YOLOv5模型性能压测

本文详细介绍了登临科技Goldwasser加速卡的Python SDK实战指南,从环境配置到YOLOv5模型性能压测的全过程。通过驱动安装、SDK环境搭建、模型转换与推理优化等步骤,帮助开发者高效利用AI加速卡提升深度学习模型性能。重点分享了批量推理压测技巧和常见问题解决方案,助力开发者充分发挥Goldwasser加速卡的算力优势。

weixin_29035147的博客 300

UVA11367 最短路 蓝书练习题

题意:n个城市,m条无向边,每个城市油价不一样。q次询问,给定起点s,终点e,求问最便宜路径。 油箱一开始设为0,假设每单位距离消耗1L汽油。 分析:dijkstra变形,设d[u][fuel] 表示到达城市u剩余油量为fuel的最小花费代价。这里很多状态是无用的,不需要全部求出来,每次加油一升一升的加。 代码如下: #include #include #include

勇敢前进的ACMer 270

高项49个过程,输入、工具技术、输出的思维导图

为了制定项目章程的管理方法主要是采用了数据收集技术,例如通过头脑风暴,通过召集主题专家和团队成员收集信息、解决方案,并在短时间内获得大量创意,并对大量创意进行分析和排序,选出最优化最适合本项目方案,并对项目成员的不同差异观点,进行了引导和对冲突的管理,最终有助于项目干系人的目标、成功标准的内容达成一致意见,形成完善的项目章程。在本过程中得到项目章程,在制定项目章程中需要包括信息有:项目名称、项目目标、项目总里程碑进度表、项目经理、主要干系人及财务预算信息。本过程在仅开展一次,或仅在项目的预定义点开展。

Legend_Jiang的博客 6179

从 Junior 到 Lead:ABAP 开发者进阶路线图与真实项目练级法

本文拆解了ABAP工程师从初级到高级的成长路径,强调能力提升依赖于可复用经验的积累。对于初级开发者,建议夯实ABAP Dictionary、内表处理和数据库思维三大基础,培养数据流与规则层的结构化思维,并逐步掌握面向对象编程。中级阶段应注重代码可维护性,通过单元测试和Clean ABAP规范提升工程质量。文章指出,ABAP开发者需要学会筛选学习重点,建立知识地图,并重视团队协作中的代码可读性。关键在于将碎片知识整合为可迁移的模型,而非盲目追求新技术。

2007 年 ~ 2025 年,深耕 SAP 技术 18 年 171

UVA11367 加满油 解题报告

【问题描述】     给出n个城市间的m条道路。给出起点A和终点B,以及汽车的邮箱容量c,计算A到B的最便宜路径。假定初始时邮箱为空的。第i个城市的油价为pi。需要回答q组询问。    【输入格式】     第一行为n,m,表示城市数目和道路数目,其中城市编号为1..n。接下来的n行,每行一个整数pi,第i+1行的pi表示第i个城市的油价为pi。再接下来的m+1行,每行表示一

cqyz_holiday的博客 800

ollama如何在自己的服务器上跑Qwen3(小白必看)

在国内下载ollama最新安装包时,使用curl -fsSL https://ollama.com/install.sh | sh命令可能会遇到网络问题导致下载进度停滞。为了解决这一问题,可以通过国内的镜像源进行下载,例如使用modelscope社区提供的最新ollama镜像仓库。具体步骤包括:首先通过pip install modelscope安装modelscope,然后使用modelscope download命令下载ollama-linux镜像,接着进入下载目录并赋予安装脚本执行权限,最后运行安装脚

Ven%的博客 756

UVA 11367 - Full Tank?(最短路+DP)

UVA 11367 - Full Tank? 题目链接 题意:给定一个无向图,每个点有一个加油站,有一个油价,现在一辆车,每次询问要从起点s走到t,邮箱容量为c,问最小代价 思路:dijkstra算法,d数组多一个状态,表示当前油量即可 不过这题如果每次都把所有状态转移完,挺费时间的,卡着时间过的 后面改成每次1升1升加油去转移状态,效率会比较快,因为有很多无用状态可以省

Remilia's 1918

温度PID控制PLC程序

温度PID稳定控制程序,适用于欧姆龙PLC,对其他PLC也具有很大参考价值

IDEA的使用指南

IDEA基于java的使用手册,可以最快速的上手,在使用中不断的丰富自己的使用技巧.

UVA 11367 Full Tank?(bfs最短路)

n个点m条无向边的图,油箱有上限,每个单位的汽油能走1单位距离,每个城市的油价val[i], 对于每个query,求s到e的最小花费。 dp[i][j]表示到达第i个城市,油箱剩余油量j时的最小花费。用bfs扩充节点,每个点拆成100个节点,时间复杂度还是可以接受的。 #include #include #include #include #include #include #include

diary_yang的专栏 1541

TMS_WebGMaps_1.9.8.0_Full_Source

TMS_WebGMaps_1.9.8.0_Full_Source 全源码 delphi cbuilder

题解 [UVA11367]Full Tank?

dijkstra

im_zyINF的博客 197

汉书HE8,好用的汇编代码编写工具

汉书HE8,好用的汇编代码编写工具早期编写汇编代码所用功能强大

UVa11367.Full Tank?(Dijkstra+DP)

题目链接:https://vjudge.net/problem/UVA-11367 题目大意: 给出n个地点 和 每个地点的油价 ,有 m 条边 , 并给出每条边长度 。1单位汽油可以走1千米 , 油箱的容量为 c , 在初始点 s 时 , 油箱中的油为 0 , 求s 到 t 的最小花费 。 思路: 因为并不能确定这个点是否需要加油,这不是一个单调性的问题,所以需要dp一下,用分层图的思...

Q755100802的博客 254

UVA 11367 - Full Tank

/* 最短路问题  可以分解为2种走法  1:原地加一单位油,2:到下一个地点。 */ #include #include #include #include #define M 10010 using namespace std; struct Edge {     int from,to,dist;     Edge(int x,int y,int z)

chenchaoflight的专栏 935

UVA 11367 Full Tank? (dij+heap+dp)

题意:给定一张nn个点mm条边的无向图,每条边有个距离D(i,j)D(i,j),车辆每经过一个单位的距离消耗一单位的油。,有一辆车从点startstart出发前往endend,车的油箱容量为cc,在每个节点ViV_i上车辆可以以PiP_i的价格补充11单位的油,现在给定qq次询问,每次询问给定出发点startstart,终点endend,油箱容量cc,问能否从起点出发到达终点,并输出最短距离思路:最

宝树啊宝树 679

UVA 11367 - Full Tank? dijkstra+DP

传送门:http://uva.onlinejudge.org/index.php?option=com_onlinejudge&Itemid=8&page=show_problem&problem=2352 题目大意: n个城市有m条道路。每个城市的油价不一样,给出起点s和终点t,以及汽车的油箱的容量,求从城市s到城市 t 的最便宜路径。(一开始油箱是空的,你每...

weixin_30532369的博客 409

UVA 11367 Full Tank? (Dijkstra 变种)

题目链接:https://cn.vjudge.net/problem/UVA-11367 #include&lt;bits/stdc++.h&gt; //#include&lt;iostream&gt; //#include&lt;queue&gt; //#include&lt;cstring&gt; //#include&lt;cstdio&gt; using namespace std; ...

满月照亮的路 298

uva 11367 dijkstra+dp状态压缩

题意:给出n个地点 和 每个地点的油价 ,有 m 条边 , 并给出每条边长度 。1单位汽油可以走1千米  , 油箱的容量为 c , 在初始点 s 时 , 油箱中的油为 0 , 求s 到 t 的最小花费 。 解法: 定义 状态 d[i][j] 表示到达 地点 i 且油箱中有 j 单位油时的最小 花费。 对于状态的转移时 , 有两种方法: 1、把每个点的所有状态都求出 2、不把每个点的状

zengchenacmer的专栏 1272

poj3635—Full Tank?(spfa+dp)

题目大意:一辆车从起点到终点,给定汽车的邮箱容量,给出每个点加每单位油的价格,点与点间的距离,(起点油量为0)计算所需最少的费用。 解题思路:spfa+dp,dp[i][j]记录汽车到达第i个点所剩j单位油所用的费用,维护一个优先队列,将产生的新的状态压入队列,前一个状态向下产生的两个新的状态1.汽车在原结点加一个单位的油2.汽车驶向下一个结点。 #include #in

zhiyuanjiang的博客 1412

CSUOJ 1891 Full Tank? 有约束条件下的最短路 分支限界法?

Description After going through the receipts from your car trip through Europe this summer, you realised that the gas prices varied between the cities you visited. Maybe you could have saved some mon

Sion 1218

Full Tank? POJ - 3635 (bfs | 最短路)

After going through the receipts from your car trip through Europe this summer, you realised that the gas prices varied between the cities you visited. Maybe you could have saved some money if you...

weixin_30590285的博客 171

The world is going through the second wave of the frenzy of cryptocurrency

                                     In the recent interview with CNBC, expert Kin-Wai Lau believed that the world is going through ‘the second wave of the frenzy of Bitcoin and cryptocurrency’. This...

maxxzheng96的博客 1224
上一篇: hdu4521 小明系列问题——小明序列 线段树 间隔大于d的最长上升子序列
下一篇: uva10600 - ACM Contest and Blackout 次小生成树
小小小小葱
博客等级 码龄14年 22粉丝 266原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

当前余额3.43元 前往充值 >
需支付:10.00元
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付元
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值