dp[u][t]表示从起点出发,到达i点且用了t次magic boot时的最短时间,

方程如下:

dp[v][t]=min(dp[v][t],dp[u][t]+dis[u][v]);

dp[v][t]=min(dp[v][t],dp[u][t-1]) (dis[u][v]<=l)

放进SPFA更新,相当于一个二维的最短路,解决DP在非DAG下的有后效性的问题。

 #include<cstdio>
#include<cstring>
#include<queue>
#include<algorithm>
using namespace std;
#define MAXN 111
#define INF (1<<29) int n,a,b,m,l,k;
int map[MAXN][MAXN],dis[MAXN][MAXN]; void Floyd(){
memcpy(dis,map,sizeof(map));
for(int k=; k<=a; ++k){
for(int i=; i<=n; ++i){
for(int j=; j<=n; ++j){
if(dis[i][k]==INF || dis[k][j]==INF) continue;
dis[i][j]=min(dis[i][j],dis[i][k]+dis[k][j]);
}
}
}
} struct QNode{
int u,t;
QNode(int _u=,int _t=):u(_u),t(_t){}
};
int dp[MAXN][];
bool vis[MAXN][];
void SPFA(){
memset(vis,,sizeof(vis));
vis[n][]=;
for(int i=; i<=n; ++i){
for(int j=; j<; ++j) dp[i][j]=INF;
}
dp[n][]=;
queue<QNode> que;
que.push(QNode(n,));
while(!que.empty()){
int u=que.front().u,t=que.front().t;
que.pop();
for(int v=; v<=n; ++v){
if(dp[v][t]>dp[u][t]+dis[u][v]){
dp[v][t]=dp[u][t]+dis[u][v];
if(!vis[v][t]){
vis[v][t]=;
que.push(QNode(v,t));
}
}
}
for(int v=; t!=k && v<=n; ++v){
if(dis[u][v]<=l && dp[v][t+]>dp[u][t]){
dp[v][t+]=dp[u][t];
if(!vis[v][t+]){
vis[v][t+]=;
que.push(QNode(v,t+));
}
}
}
vis[u][t]=;
}
} int main(){
int t,u,v,w;
scanf("%d",&t);
while(t--){
scanf("%d%d%d%d%d",&a,&b,&m,&l,&k);
n=a+b;
for(int i=; i<=n; ++i){
for(int j=; j<=n; ++j) map[i][j]=INF;
}
while(m--){
scanf("%d%d%d",&u,&v,&w);
map[u][v]=map[v][u]=min(map[u][v],w);
}
Floyd();
SPFA();
int res=INF;
for(int i=; i<=k; ++i){
res=min(res,dp[][i]);
}
printf("%d\n",res);
}
return ;
}

ZOJ1232 Adventure of Super Mario(DP+SPFA)的更多相关文章

  1. UVA10269 Adventure of Super Mario(Floyd+DP)

    UVA10269 Adventure of Super Mario(Floyd+DP) After rescuing the beautiful princess, Super Mario needs ...

  2. HDU 4417 Super Mario(线段树)

    Super Mario Time Limit: 2000/1000 MS (Java/Others)    Memory Limit: 32768/32768 K (Java/Others) Tota ...

  3. HDU 4417 Super Mario (划分树)(二分)

    Super Mario Time Limit: 2000/1000 MS (Java/Others)    Memory Limit: 32768/32768 K (Java/Others)Total ...

  4. Super Mario(主席树)

    Super Mario  Mario is world-famous plumber. His “burly” figure and amazing jumping ability reminded ...

  5. ZOJ1232 Adventure of Super Mario spfa上的dp

    很早之前听说有一种dp是在图上的dp,然后是在跑SPFA的时候进行dp,所以特地找了一题关于在SPFA的时候dp的. 题意:1~a是村庄 a+1~a+b是城堡,存在m条无向边.求由a+b->1的 ...

  6. ZOJ 1232 Adventure of Super Mario (Floyd + DP)

    题意:有a个村庄,编号为1到a,有b个城堡,编号为a+1到a+b.现在超级玛丽在a+b处,他的家在1处.每条路是双向的,两端地点的编号以及路的长度都已给出.路的长度和通过所需时间相等.他有一双鞋子,可 ...

  7. UVa 10269 Adventure of Super Mario (Floyd + DP + BFS)

    题意:有A个村庄,B个城市,m条边,从起点到终点,找一条最短路径.但是,有一种工具可以使人不费力的移动L个长度,但始末点必须是城市或村庄.这种工具有k个,每个只能使用一次,并且在城市内部不可使用,但在 ...

  8. UVA-10269 Adventure of Super Mario (dijkstra)

    题目大意:有A个村庄,B个城市,m条边,从起点到终点,找一条最短路径.但是,有一种工具可以使人不费力的移动L个长度,但始末点必须是城市或村庄.这种工具有k个,每个只能使用一次,并且在城市内部不可使用, ...

  9. ZOJ1027 Travelling Fee(DP+SPFA)

    给一张有向无环图,边都有花费,从某点到某点走的那条路径上的那一条花费最多的边可以省掉,问从起点到终点的最少花费的多少, 往DP想的话,就可以写出这个状态dp[u][mx],表示到达u点已经省掉的花费为 ...

随机推荐

  1. 3ds Max光照纹理导入Unity的教程.

    原地址:http://www.cocoachina.com/gamedev/gameengine/2010/0531/1581.html 相信这个3ds Max光照纹理导入Unity的教程对游戏设计师 ...

  2. PHP随笔

    php(PHP开发) PHP(外文名: Hypertext Preprocessor,中文名:“超文本预处理器”)是一种通用开源脚本语言.语法吸收了C语言.Java和Perl的特点,易于学习,使用广泛 ...

  3. c# 继承,多态,new /overrid 区别, 引用父类的方法

    好久没碰c#了,偶尔需要制作点小工具.为了一个灵活的架构设计,需要对继承/多态有比较深刻的理解. 不料忘得差不多了,好吧,再来回忆下.直接上代码了,如下: using System; using Sy ...

  4. ubuntu12 apache2部署多个网站的方法

    由于对apache2的配置不是很精通.吃了不少瘪. 这里总结下,希望对碰到同样问题的人带来帮助: 假设需求是有两个站点,site1和site2.其端口分别为80和8080. 1. 配置监听端口 修改 ...

  5. Java RMI 框架

    RMI(即Remote Method Invoke 远程方法调用).在Java中,只要一个类extends了java.rmi.Remote接口,即可成为存在于服务器端的远程对象,供客户端访问并提供一定 ...

  6. css选择器集体声明

    <title>静夜思</title><style type="text/css">h1,#two,.red{ color:#ff0000; fo ...

  7. Gym 100801A Alex Origami Squares (求正方形边长)

    题目:传送门.(需要下载PDF) 题意:给定一个长方形,在长方形内部画三个相同的正方形,问正方形的边长最大是多大. 题解:根据长宽比例可以算出三种情况,如果长比宽大三倍以上,那么正方形边长就是宽:如果 ...

  8. css3学习总结1--CSS3选择器

    CSS3的属性选择器主要包括以下几种: 1. E[attr^="value"]:指定了属性名,并且有属性值,属性值是以value开头的: 2. E[attr$="valu ...

  9. svn利用钩子post-commit自动更新到线上测试服务器(测试中未验证)

    创建一个新的版本库: [root@centos03 svn]# pwd /home/svn [root@centos03 svn]# svnadmin create webtest [root@cen ...

  10. 字典树(Trie树)的实现及应用

    >>字典树的概念 Trie树,又称字典树,单词查找树或者前缀树,是一种用于快速检索的多叉树结构,如英文字母的字典树是一个26叉树,数字的字典树是一个10叉树.与二叉查找树不同,Trie树的 ...