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] ...
随机推荐
- 在Excel表格中打字为何会被覆盖掉
修改证件图片背景:https://www.cnblogs.com/liyanbin/p/9466746.html Insert键是插入和改写(覆盖)的开关如果当前处于改写(覆盖)模式,再按一下Inse ...
- Django - app
1.app目录 migrations:数据库操作的记录(只记录修改表结构的记录); __init__文件:python2中必须填加,python3中无要求,可以不添加: admin:django为我们 ...
- for循环中索引值和取值的迷惑
利用for循环和range从100——10,倒序讲所有的偶数添加到一个新列表中,然后对列表的元素进行筛选,将能被4整除的数留下来. even = []for i in range(100,9,-1): ...
- js中数组,字符串,对象常用方法总结
时间对象方法 获取当前时间的毫秒数 1.var timestamp = Date.parse(new Date()); 2.var timestamp = (new Date()).valueOf() ...
- Vova and Train (codeforces 1066A)
数学题.用右边界以内的区间内的灯减去左边界以内区间内的灯,并且如果左边界正好有灯再减去一即可 我的代码 #include <bits/stdc++.h> using namespace s ...
- 29. 误拼写时的fuzzy模糊搜索技术
搜索的时候,可能输入的搜索文本会出现误拼写的情况,这时就需要es为我们进行智能纠错 比如有两个文档: doc1: hello world doc2: hello java 现在要搜索:hall ...
- C#学习笔记_14_接口&命名空间
14_接口&命名空间 接口 一系列规范 语法: 如果一个类的后面既有父类也有接口,那么一定是父类在前,接口靠后 一个类可以实现多个接口 规范:接口命名以大写字母 I 开头 接口中可以包含接口方 ...
- Python之类方法,lambda,闭包简谈
类方法,lambda,闭包 类方法 lambda 闭包 类方法 classmethod staticmethod instancemethod 类方法 类方法,通过装饰器@classmethod来标明 ...
- Django——4 模板标签 模板的继承与引用
Django 模板标签 常用标签 模板的继承与引用 模板标签 标签在渲染的过程中提供任意的逻辑 标签语法: 由%}和 {% 来定义的,例如:{%tag%} {%endtag%} 这个定义是刻意模糊的. ...
- 09springMVC对ajax的支持
u 最直接的Ajax处理 u 数据绑定@RequestBody/@ResponseBody u 使用@RequestBody/@ResponseBody来支持Ajax u 使用HttpEnti ...