用二元组$(city,fuel)$即可记录所有状态,以当前花费为关键字优先队列,开数组记录直接做即可

有一个点在于每次不用枚举所有的加油数量,只需要加一即可,因为如果在加一升更优的话又会扩展出加更多油的状态,不必枚举过多

#include<iostream>
#include<cstdio>
#include<queue>
#include<cstring>
using namespace std;
const int maxn=;
const int maxm=;
int n,m,a[maxn],c;
struct node{
int v,w,nxt;
}e[maxm*];
struct now{
int x,r,c;//当前城市,剩余油量,花费
now(){}
now(int xx,int rr,int cc){
x=xx,r=rr,c=cc;
}
bool operator <(const now&a)const{
return c>a.c;
}
};
int head[maxn],cnt;
int d[maxn][],v[maxn][];
inline void add(int u,int v,int w){
e[++cnt].v=v;e[cnt].w=w;e[cnt].nxt=head[u];head[u]=cnt;
}
priority_queue<now>q;
int bfs(int st,int ed){
while(!q.empty())q.pop();
memset(d,0x3f,sizeof(d));
memset(v,,sizeof(v));
q.push(now(st,,));d[st][]=;
while(!q.empty()){
now x=q.top();q.pop();
v[x.x][x.r]=;
if(x.x==ed)return x.c;
if(!v[x.x][x.r+] && x.r+<=c && !v[x.x][x.r+] &&(d[x.x][x.r+]>d[x.x][x.r]+a[x.x])){
d[x.x][x.r+]=d[x.x][x.r]+a[x.x];
q.push(now(x.x,x.r+,x.c+a[x.x]));
}
for(int i=head[x.x];i;i=e[i].nxt){
int y=e[i].v,z=e[i].w;
if(x.r-z>= && !v[y][x.r-z] && d[y][x.r-z]>x.c){
d[y][x.r-z]=x.c;
q.push(now(y,x.r-z,x.c));
}
}
}
return -;
}
int main(){
scanf("%d%d",&n,&m);
for(int i=;i<n;i++)scanf("%d",&a[i]);
for(int i=,u,v,w;i<=m;i++){
scanf("%d%d%d",&u,&v,&w);
add(u,v,w);add(v,u,w);
}
int Q;
scanf("%d",&Q);
for(int i=,st,ed;i<=Q;i++){
scanf("%d%d%d",&c,&st,&ed);
int ans=bfs(st,ed);
if(ans!=-)
printf("%d\n",ans);
else printf("impossible\n");
}
}

[题解](优先队列广搜)POJ_3635_Full Tank的更多相关文章

  1. USACO Milk Routing /// 优先队列广搜

    题目大意: 在n个点 m条边的无向图中 需要运送X单位牛奶 每条边有隐患L和容量C 则这条边上花费时间为 L+X/C 求从点1到点n的最小花费 优先队列维护 L+X/C 最小 广搜到点n #inclu ...

  2. nyoj 1022 最少步数【优先队列+广搜】

    最少步数 时间限制:3000 ms  |  内存限制:65535 KB 难度:4   描述 这有一个迷宫,有0~8行和0~8列: 1,1,1,1,1,1,1,1,1 1,0,0,1,0,0,1,0,1 ...

  3. Dungeon Master ZOJ 1940【优先队列+广搜】

    Problem Description You are trapped in a 3D dungeon and need to find the quickest way out! The dunge ...

  4. ACM/ICPC 2018亚洲区预选赛北京赛站网络赛 A.Saving Tang Monk II(优先队列广搜)

    #include<bits/stdc++.h> using namespace std; ; ; char G[maxN][maxN]; ]; int n, m, sx, sy, ex, ...

  5. Bzoj 2252: [2010Beijing wc]矩阵距离 广搜

    2252: [2010Beijing wc]矩阵距离 Time Limit: 10 Sec  Memory Limit: 256 MBSubmit: 563  Solved: 274[Submit][ ...

  6. PAT L3-004 肿瘤诊断(三维广搜)

    在诊断肿瘤疾病时,计算肿瘤体积是很重要的一环.给定病灶扫描切片中标注出的疑似肿瘤区域,请你计算肿瘤的体积. 输入格式: 输入第一行给出4个正整数:M.N.L.T,其中M和N是每张切片的尺寸(即每张切片 ...

  7. PAT L3-008 喊山(广搜)

    喊山,是人双手围在嘴边成喇叭状,对着远方高山发出“喂—喂喂—喂喂喂……”的呼唤.呼唤声通过空气的传递,回荡于深谷之间,传送到人们耳中,发出约定俗成的“讯号”,达到声讯传递交流的目的.原来它是彝族先民用 ...

  8. hrbust 1621 迷宫问题II 广搜

    题目链接:http://acm.hrbust.edu.cn/vj/index.php?/vj/index.php?c=&c=contest-contest&cid=134#proble ...

  9. hdu5025 状态压缩广搜

    题意:       悟空要救唐僧,中途有最多就把钥匙,和最多五条蛇,要求就得唐僧并且拿到所有种类的钥匙(两个1只拿一个就行),拿钥匙i之前必须拿到钥匙i-1,打蛇多花费一秒,问救出唐僧并且拿到所有种类 ...

随机推荐

  1. 获取window状态栏和标题栏的高度

    1.获取状态栏高度: decorView是window中的最顶层view,可以从window中获取到decorView,然后decorView有个getWindowVisibleDisplayFram ...

  2. 设计模式 之 《观察者模式 (Observer)》

    #ifndef __OBSERVER_MODEL__ #define __OBSERVER_MODEL__ #include <string> #include <iostream& ...

  3. java多线程编程核心技术——第三章总结

    第一节等待/通知机制 1.1不使用等待/通知机制实现线程间的通讯 1.2什么是等待/通知机制 1.3等待/通知机制的实现 1.4方法wait()锁释放与notify()锁不释放 1.5当interru ...

  4. asp.net分页asp.net无刷新分页高效率分页

    项目中经常会用到分页的功能类似的项目做过无数个了,今个把自己常用的分页代码分享一下. 首先说说服务端处理的代码: 下面代码中重点是分页的sql语句的写法,其中的参数@n是当前的页码,总的来说本服务端主 ...

  5. asp.net C#操作存储过程读取存储过程输出参数值

    这段时间在做一个价格平台的项目时候,同事让我写一个存储过程.该存储过程是根据查询条件得出一组新数据,并且返回该组数据的总条数,此处的存储过程我用到了分页,其中主要知识点和难点是之前做项目的时候没有用到 ...

  6. springMVC绑定json参数之二(2.1)

    二.springmvc 接收不同格式的json字符串 1.首先扫盲几个知识点: 这个绑定json参数讲的都是用@RequestBody标签,所以前台必须传json字符串,不能是json对象,但是如果不 ...

  7. python 基础 字典 小例子

    统计单词次数 作为字典存储 cotent = "who have an apple apple is free free is money you know" result = { ...

  8. Learning Python 004 基础的数据类型和变量

    Python 基础的数据类型和变量 数据类型 整数 Python可以处理任意大小的整数,当然包括负整数. Python表示十六进制也用0x前缀. 浮点数 1.23x10^9和12.3x10^8是完全相 ...

  9. Leetcode: 67. Add Binary

    二进制加法 https://discuss.leetcode.com/topic/33693/another-simple-java public String addBinary(String a, ...

  10. Entity Framework Code-First(10.2):Entity Mappings

    Entity Mappings using Fluent API: Here, we will learn how to configure an entity using Fluent API. W ...