POJ 3635 优先队列BFS
(感谢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的更多相关文章
- Full Tank? POJ - 3635 (bfs | 最短路)
After going through the receipts from your car trip through Europe this summer, you realised that th ...
- POJ 2449 - Remmarguts' Date - [第k短路模板题][优先队列BFS]
题目链接:http://poj.org/problem?id=2449 Time Limit: 4000MS Memory Limit: 65536K Description "Good m ...
- 【POJ 3635】 Full Tank
[题目链接] http://poj.org/problem?id=3635 [算法] 优先队列BFS 实现类似于堆优化dijkstra [代码] #include <algorithm> ...
- 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 ...
- POJ 3635 - Full Tank? - [最短路变形][手写二叉堆优化Dijkstra][配对堆优化Dijkstra]
题目链接:http://poj.org/problem?id=3635 题意题解等均参考:POJ 3635 - Full Tank? - [最短路变形][优先队列优化Dijkstra]. 一些口胡: ...
- POJ 3635 Full Tank? 【分层图/最短路dp】
任意门:http://poj.org/problem?id=3635 Full Tank? Time Limit: 1000MS Memory Limit: 65536K Total Submis ...
- ZOJ 649 Rescue(优先队列+bfs)
Rescue Time Limit: 2000/1000 MS (Java/Others) Memory Limit: 65536/32768 K (Java/Others) Total Sub ...
- 【POJ3635】Full Tank 优先队列BFS
普通BFS:每个状态只访问一次,第一次入队时即为该状态对应的最优解. 优先队列BFS:每个状态可能被更新多次,入队多次,但是只会扩展一次,每次出队时即为改状态对应的最优解. 且对于优先队列BFS来说, ...
- Codeforces 677D - Vanya and Treasure - [DP+优先队列BFS]
题目链接:http://codeforces.com/problemset/problem/677/D 题意: 有 $n \times m$ 的网格,每个网格上有一个棋子,棋子种类为 $t[i][j] ...
随机推荐
- Python 连接数据库 day5
import pymysql #连接数据库,port必须是int型,字符编码是utf8,不能是utf-8,password必须是字符串 conn = pymysql.connect(host=', d ...
- 铁大FaceBook的使用体验副本
铁大FaceBook是一个类似QQ和微信等聊天程序的缩小版网站,并且其针对领域较为狭窄:即只针对校园的学生和导员等人员.但其有值得推广的潜力性和可能性. 对于使用它的体验:第一点我感觉这个网站的界面很 ...
- 第十节:numpy之数组文件操作
1.安装ipython 2.创建txt文件 3.直接上代码:
- debian 7 安装
1. 从 live cd 或者 dvd 进行安装,官方文档已经够用,可以将 live cd 写进 u 盘,也可以将 dvd 放到硬盘上通过 grub 引导启动安装,文档在这里. 2.安装过程中尽量选择 ...
- 编译OpenWrt失败
/home/fly/work_dir/OpenWrt-SDK/OpenWrt-Test/trunk/scripts/download.pl "/home/fly/work_dir/OpenW ...
- BUAA_OO_博客作业三
1 JML语言总结 1.1 JML语言的理论基础 JML(Java Modeling Language)是用于对Java程序进行规格化设计的一种表示语言.JML是一种行为接口规格语言(Behavi ...
- java后台处理解析json字符串的两种方式
简单说一下背景 上次后端通过模拟http请求百度地图接口,得到的是一个json字符串,而我只需要其中的某个key对应的value. 当时我是通过截取字符串取的,后来觉得不太合理,今天整理出了两种处理解 ...
- FOJ2250 不可能弹幕结界
Problem 2250 不可能弹幕结界 Time Limit: 1000 mSec Memory Limit : 65536 KB Problem Description 咲夜需要穿过一片弹幕 ...
- 联赛前集训日记Day1
考试 炸的凄惨 T1 显然要高精搞一下,然而我的$DFS$竟然比我的$O(n^{2})$递推快 T2 欧拉路径的题,很不可做的样子,就没敢费时间打 T3 $DFS$枚举可过,然而我太蠢 GG 刷题 改 ...
- ReatEasy+用户指南----第9章@MatrixParam
转载说明出处:http://blog.csdn.net/nndtdx/article/details/6870391 原文地址 http://docs.jboss.org/resteasy/docs/ ...