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. Excel导入导出,生成和下载Excel报表、附件等操作--ASP.NET

    public class OutExcel { public static void OutExcel_bb(DataTable dt, string thepath, string temppath ...

  2. 在link的url里新增参数

    (文章都是从我的个人主页上粘贴过来的,大家也可以访问我的主页 www.iwangzheng.com) <%= link_to image_tag("/images/icons/aaa. ...

  3. 百度图片爬虫-python版-如何爬取百度图片?

    上一篇我写了如何爬取百度网盘的爬虫,在这里还是重温一下,把链接附上: http://www.cnblogs.com/huangxie/p/5473273.html 这一篇我想写写如何爬取百度图片的爬虫 ...

  4. mysql数据库性能优化(包括SQL,表结构,索引,缓存)

    优化目标减少 IO 次数IO永远是数据库最容易瓶颈的地方,这是由数据库的职责所决定的,大部分数据库操作中超过90%的时间都是 IO 操作所占用的,减少 IO 次数是 SQL 优化中需要第一优先考虑,当 ...

  5. PXE介绍(PXE+kickstart无人值守安装)

    PXE概念 PXE(Pre-boot Execution Environment,预启动执行环境)是由Intel公司开发的最新技术,工作于Client/Server的网络模式,支持工作站通过网络从远端 ...

  6. MFC获取系统当前时间的几种方法

    1.使用CTime类 CString str; //获取系统时间 CTime tm; tm=CTime::GetCurrentTime(); str=tm.Format("现在时间是%Y年% ...

  7. 2模02day1题解

    源文件在我的网盘上.链接:http://pan.baidu.com/s/1qWPUDRm 密码:k52e (只有机智的人才能看到我的链接) 机智的双重下划线~~~ T1 T1就是一个递推,这题目把我恶 ...

  8. urllib2加入header及解决中文乱码问题

    def main(): url = "http://www.douban.com" #伪装桌面浏览器 headers = {'User-Agent':'Mozilla/5.0 (W ...

  9. js 去掉input标签中的百分号【%】

    parseInt("100%") --100 parseFloat("17%")     --17

  10. FZU 2148 moon game (计算几何判断凸包)

    Moon Game Time Limit:1000MS     Memory Limit:32768KB     64bit IO Format:%I64d & %I64u Submit St ...