POJ2686 Traveling by Stagecoach(状压DP+SPFA)
题目大概是给一张有向图,有n张票,每张票只能使用一次,使用一张票就能用pi匹马拉着走过图上的一条边,走过去花的时间是边权/pi,问从a点走到b点的最少时间是多少。
用dp[u][S]表示当前在u点且用过的票集合是S的最少时间,丢进SPFA更新。
#include<cstdio>
#include<cstring>
#include<queue>
using namespace std;
#define INF 1e8
#define MAXN 33
#define MAXM 33*33
struct Edge{
int u,v,next;
double w;
}edge[MAXM];
int NE,head[MAXN];
void addEdge(int u,int v,double w){
edge[NE].u=u; edge[NE].v=v; edge[NE].w=w;
edge[NE].next=head[u]; head[u]=NE++;
}
struct Node{
int u,S;
Node(int _u,int _S):u(_u),S(_S){}
};
int n,m,t[];
double d[][<<];
bool vis[][<<];
void SPFA(int vs){
memset(vis,,sizeof(vis));
vis[vs][]=;
for(int i=; i<=m; ++i){
for(int j=; j<(<<n); ++j) d[i][j]=INF;
}
d[vs][]=;
queue<Node> que;
que.push(Node(vs,));
while(!que.empty()){
Node nd=que.front(); que.pop();
int u=nd.u,S=nd.S;
for(int i=head[u]; i!=-; i=edge[i].next){
int v=edge[i].v;
for(int j=; j<n; ++j){
if((S>>j)&) continue;
if(d[v][S^(<<j)]>d[u][S]+edge[i].w/t[j]){
d[v][S^(<<j)]=d[u][S]+edge[i].w/t[j];
if(!vis[v][S^(<<j)]){
vis[v][S^(<<j)]=;
que.push(Node(v,S^(<<j)));
}
}
}
}
vis[u][S]=;
}
}
int main(){
int p,vs,vt,a,b;
double c;
while(~scanf("%d%d%d%d%d",&n,&m,&p,&vs,&vt) && (n||m||p||vs||vt)){
NE=;
memset(head,-,sizeof(head));
for(int i=; i<n; ++i) scanf("%d",t+i);
while(p--){
scanf("%d%d%lf",&a,&b,&c);
addEdge(a,b,c); addEdge(b,a,c);
}
SPFA(vs);
double res=INF;
for(int i=; i<(<<n); ++i){
res=min(res,d[vt][i]);
}
if(res==INF) puts("Impossible");
else printf("%f\n",res);
}
return ;
}
POJ2686 Traveling by Stagecoach(状压DP+SPFA)的更多相关文章
- POJ 2686 Traveling by Stagecoach (状压DP)
题意:有一个人从某个城市要到另一个城市, 有n个马车票,相邻的两个城市走的话要消耗掉一个马车票.花费的时间呢,是马车票上有个速率值 ,问最后这个人花费的最短时间是多少. 析:和TSP问题差不多,dp[ ...
- Traveling by Stagecoach /// 状压DP oj22914
题目大意: 输入n,m,p,a,b n是车票数(1<=n<=8),m是城市数(2<=m<=30) p是路径数(可能为0),a是起点,b是终点 接下来一行有n个数 为每张车票的马 ...
- 洛谷P2761 软件补丁问题(状压DP,SPFA)
题意 描述不清... Sol 网络流24题里面怎么会有状压dp?? 真是狗血,不过还是简单吧. 直接用$f[sta]$表示当前状态为$sta$时的最小花费 转移的时候枚举一下哪一个补丁可以搞这个状态 ...
- HDU 4284 状压dp+spfa
题意: 给定n个点 m条无向边 d元. 以下m行表示每条边 u<=>v 以及花费 w 以下top 以下top行 num c d 表示点标为num的城市 工资为c 健康证价格为d 目标是经过 ...
- 【BZOJ 2595】2595: [Wc2008]游览计划 (状压DP+spfa,斯坦纳树?)
2595: [Wc2008]游览计划 Time Limit: 10 Sec Memory Limit: 256 MBSec Special JudgeSubmit: 1572 Solved: 7 ...
- POJ 2686 Traveling by Stagecoach 壮压DP
大意是有一个人从某个城市要到另一个城市(点数<=30) 然后有n个马车票,相邻的两个城市走的话要消耗掉一个马车票. 花费的时间呢,是马车票上有个速率值,用边/速率就是花的时间. 问最后这个人花费 ...
- bzoj 1556: 墓地秘密【状压dp+spfa】
显然是状压,显然不可能把所有格子压起来 仔细观察发现只有机关周围的四个格子有用以及起点,所以我们用spfa处理出这些格子两两之间的距离(注意细节--这里写挂了好几次),然后设f[s][i]为碰完的机关 ...
- 洛谷P2566 [SCOI2009]围豆豆(状压dp+spfa)
题目传送门 题解 Σ(っ °Д °;)っ 前置知识 射线法:从一点向右(其实哪边都行)水平引一条射线,若射线与路径的交点为偶数,则点不被包含,若为奇数,则被包含.(但注意存在射线与路径重合的情况) 这 ...
- POJ2686 Traveling by Stagecoach 状态压缩DP
POJ2686 比较简单的 状态压缩DP 注意DP方程转移时,新的状态必然数值上小于当前状态,故最外层循环为状态从大到小即可. #include <cstdio> #include < ...
随机推荐
- cocos基础教程(8)粒子效果
简介 粒子系统是指计算机图形学中模拟特定现象的技术,它在模仿自然现象.物理现象及空间扭曲上具备得天独厚的优势,为我们实现一些真实自然而又带有随机性的特效(如爆炸.烟花.水流)提供了方便. 粒子属性 一 ...
- mac安装软件管家homebrew
http://www.iwangzheng.com/ 1.简介 众所周知,Mac的操作系统是基于Unix的,在这个系统上大家可以安装一些专门为mac定制开发的软件.这就带来了一个问题,手工编译每个软件 ...
- ORACLE10G工作原理
数据库查询语句内部执行过程 Select * from xxx 步骤 分析阶段(parse) 1. 共享池库高速缓存有没有该语句.如果有直接返回结果. 2. 语法分 ...
- Linux MySQL差异备份技巧
MSSQL差异备份使用技巧 15 Apr 2013 所谓的差异备份,就是只备份最近一次备份之后到此次备份之前所增加的那一部分数据.打个比方我第N次备份后数据库存放的内容是ABCD,然后我第N+1次 备 ...
- 分享一个强大的采集类,还可以模拟php多进程
做采集的时候,可以使用file_get_contents()去获取网页源代码,但是使用file_get_contents采集,速度慢,而且超时时间,不好控制.如果采集的页面不存在,需要等待的时间很长. ...
- CSS clearfix
The problem happens when a floated element is within a container box, that element does not automati ...
- linux 下查看某个端口是否被占用
lsof -i:端口号 转自: http://my.oschina.net/u/193184/blog/146885
- 【Python】python 普通继承方式和super继承方式
Python中对象方法的定义很怪异,第一个参数一般都命名为self(相当于其它语言的this),用于传递对象本身,而在调用的时候则不必显式传递,系统会自动传递.举一个很常见的例子:>>&g ...
- ECharts2.2.0 兼容IE8
IE 8,ECharts2.2.0 版本,demo的各个功能均正常显示在IE8上面, 但是我在真正做的时候,我的html却不能显示,画面乱了,而且function也不能用, 都准备用1.4.1版本了, ...
- 【转】Solr5.3.1定时增量添加索引和重做索引
本文转自:https://code.google.com/p/solr-dataimport-scheduler/ Solr Data Import Hander Scheduler 说明:Solr官 ...