(感谢lyd学长的幻灯片)

注意vis数组的应用 在vis[i][j]中 i表示到了第i个点 j表示还剩j升油 vis[i][j]表示最小话费。 这样只需搜到话费比它少的更新入堆就OK了

//By: Sirius_Ren
#include <queue>
#include <cstdio>
#include <cstring>
using namespace std;
struct node{int num,wei,oil;}jy,temp;
int next[20005],first[20005],v[20005],w[20005],p[20005],tot=0,c,s,e,ans,vis[2005][205];
void add(int x,int y,int ww){v[tot]=y,w[tot]=ww,next[tot]=first[x],first[x]=tot++;}
bool operator<(node a,node b){return a.wei>b.wei;}
bool bfs(){
priority_queue<node>pq;
memset(vis,0x3f,sizeof(vis));
jy.num=s;jy.oil=jy.wei=0;vis[jy.num][jy.oil]=0;
pq.push(jy);
while(!pq.empty()){
jy=pq.top(),pq.pop();
if(jy.num==e){printf("%d\n",jy.wei);return true;}
temp.num=jy.num,temp.oil=jy.oil+1,temp.wei=jy.wei+p[jy.num];
if(temp.oil<=c&&vis[temp.num][temp.oil]>temp.wei+p[jy.num])vis[temp.num][temp.oil]=temp.wei,pq.push(temp);
for(int i=first[jy.num];~i;i=next[i])
if(jy.oil-w[i]>=0&&vis[v[i]][jy.oil-w[i]]>jy.wei)
temp.num=v[i],temp.oil=jy.oil-w[i],temp.wei=jy.wei,vis[temp.num][temp.oil]=temp.wei,pq.push(temp);
}
return false;
}
int main(){
int n,m,xx,yy,ww,q;
scanf("%d%d",&n,&m);
memset(first,-1,sizeof(first));
for(int i=0;i<n;i++) scanf("%d",&p[i]);
for(int i=1;i<=m;i++)scanf("%d%d%d",&xx,&yy,&ww),add(xx,yy,ww),add(yy,xx,ww);
scanf("%d",&q);
while(q--){
scanf("%d%d%d",&c,&s,&e);
if(!bfs())printf("impossible\n");
}
}

POJ 3635 优先队列BFS的更多相关文章

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

    After going through the receipts from your car trip through Europe this summer, you realised that th ...

  2. POJ 2449 - Remmarguts' Date - [第k短路模板题][优先队列BFS]

    题目链接:http://poj.org/problem?id=2449 Time Limit: 4000MS Memory Limit: 65536K Description "Good m ...

  3. 【POJ 3635】 Full Tank

    [题目链接] http://poj.org/problem?id=3635 [算法] 优先队列BFS 实现类似于堆优化dijkstra [代码] #include <algorithm> ...

  4. hdu 1026 Ignatius and the Princess I【优先队列+BFS】

    链接: http://acm.hdu.edu.cn/showproblem.php?pid=1026 http://acm.hust.edu.cn/vjudge/contest/view.action ...

  5. POJ 3635 - Full Tank? - [最短路变形][手写二叉堆优化Dijkstra][配对堆优化Dijkstra]

    题目链接:http://poj.org/problem?id=3635 题意题解等均参考:POJ 3635 - Full Tank? - [最短路变形][优先队列优化Dijkstra]. 一些口胡: ...

  6. POJ 3635 Full Tank? 【分层图/最短路dp】

    任意门:http://poj.org/problem?id=3635 Full Tank? Time Limit: 1000MS   Memory Limit: 65536K Total Submis ...

  7. ZOJ 649 Rescue(优先队列+bfs)

    Rescue Time Limit: 2000/1000 MS (Java/Others)    Memory Limit: 65536/32768 K (Java/Others) Total Sub ...

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

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

  9. Codeforces 677D - Vanya and Treasure - [DP+优先队列BFS]

    题目链接:http://codeforces.com/problemset/problem/677/D 题意: 有 $n \times m$ 的网格,每个网格上有一个棋子,棋子种类为 $t[i][j] ...

随机推荐

  1. 解决 i5 6500 安装黑苹果 Sierra 显卡不正常问题

    i5 6500内置HD 530显卡,装好Sierra显卡驱动不太正常. 先下载Clover configurator 用Clover configurator加载 EFI (Mount EFI)分区 ...

  2. 惊了!!! 小白零基础学java (月薪过万是你的梦想嘛) 手把手教学 就怕你不动手【二十五】第二章【初识MySQL】

    初识MySQL1. 了解主流的数据库和数据库分类1.1 数据库概念数据库:按照数据结构来组织.存储和管理数据的一种建立在计算机存储设备上的仓库. 数据库的优势: 1. 可以持久化存储大量的数据.方便我 ...

  3. profiler-gpu分析记录

    查看 Android 手机芯片信息下面以 夜神模拟器为例 D:\cmderλ adb devices # 1. 列出安卓设备List of devices attached127.0.0.1:6200 ...

  4. 通过JS唤醒app(安卓+ios)

    有需求说要通过页面按钮唤醒app,或者手机上没有这款app跳转到商店,然后刚开始也是查了资料的,结果发现一头雾水,不过最后还是捣鼓出来了,当然也参考了前人分享的经验,下面我就将方法整理一下: 首先明确 ...

  5. 解决高分屏/高DPI下GNOME3/Linux字体和按钮太小的问题

    更改系统设置就好了. 我的设备是Surface Pro,12英寸,分辨率2736x1824,在虚拟机里安装CentOS 7后字特别小,标题栏的最小化/最大化/关闭按钮也很小,眼睛受不了的. 更改两个设 ...

  6. i++与++i的区别及效率

    i++与++i的区别及效率   先看看基本区别:i++ :先在i所在的表达式中使用i的当前值,后让i加1++i :让i先加1,然后在i所在的表达式中使用i的新值 看一些视频教程里面写for循环的时候都 ...

  7. Spring学习总结(4)——Spring AOP教程

    一.概念 AOP(Aspect Oriented Programming):面向切面编程. 面向切面编程(也叫面向方面编程),是目前软件开发中的一个热点,也是Spring框架中的一个重要内容.利用AO ...

  8. Anton and Permutation

    Anton and Permutation time limit per test 4 seconds memory limit per test 512 megabytes input standa ...

  9. vjudge B - Design T-Shirt

    B - Design T-Shirt 思路:水题,模拟即可. #include<cstdio> #include<cstring> #include<iostream&g ...

  10. ZooKeeper的应用场景(转)

    应用场景1 :统一命名服务 分布式应用中,通常需要一套完备的命令机制,既能产生唯一的标识,又方便人识别和记忆. 我们知道,每个ZNode都可以由其路径唯一标识,路径本身也比较简洁直观,另外ZNode上 ...