ZOJ1232 Adventure of Super Mario(DP+SPFA)
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)的更多相关文章
- UVA10269 Adventure of Super Mario(Floyd+DP)
UVA10269 Adventure of Super Mario(Floyd+DP) After rescuing the beautiful princess, Super Mario needs ...
- HDU 4417 Super Mario(线段树)
Super Mario Time Limit: 2000/1000 MS (Java/Others) Memory Limit: 32768/32768 K (Java/Others) Tota ...
- HDU 4417 Super Mario (划分树)(二分)
Super Mario Time Limit: 2000/1000 MS (Java/Others) Memory Limit: 32768/32768 K (Java/Others)Total ...
- Super Mario(主席树)
Super Mario Mario is world-famous plumber. His “burly” figure and amazing jumping ability reminded ...
- ZOJ1232 Adventure of Super Mario spfa上的dp
很早之前听说有一种dp是在图上的dp,然后是在跑SPFA的时候进行dp,所以特地找了一题关于在SPFA的时候dp的. 题意:1~a是村庄 a+1~a+b是城堡,存在m条无向边.求由a+b->1的 ...
- ZOJ 1232 Adventure of Super Mario (Floyd + DP)
题意:有a个村庄,编号为1到a,有b个城堡,编号为a+1到a+b.现在超级玛丽在a+b处,他的家在1处.每条路是双向的,两端地点的编号以及路的长度都已给出.路的长度和通过所需时间相等.他有一双鞋子,可 ...
- UVa 10269 Adventure of Super Mario (Floyd + DP + BFS)
题意:有A个村庄,B个城市,m条边,从起点到终点,找一条最短路径.但是,有一种工具可以使人不费力的移动L个长度,但始末点必须是城市或村庄.这种工具有k个,每个只能使用一次,并且在城市内部不可使用,但在 ...
- UVA-10269 Adventure of Super Mario (dijkstra)
题目大意:有A个村庄,B个城市,m条边,从起点到终点,找一条最短路径.但是,有一种工具可以使人不费力的移动L个长度,但始末点必须是城市或村庄.这种工具有k个,每个只能使用一次,并且在城市内部不可使用, ...
- ZOJ1027 Travelling Fee(DP+SPFA)
给一张有向无环图,边都有花费,从某点到某点走的那条路径上的那一条花费最多的边可以省掉,问从起点到终点的最少花费的多少, 往DP想的话,就可以写出这个状态dp[u][mx],表示到达u点已经省掉的花费为 ...
随机推荐
- [Effective JavaScript 笔记]第56条:避免不必要的状态
API有时被归为两类:有状态的和无状态的.无状态的API提供的函数或方法的行为只取决于输入,而与程序的状态改变无关.字符串的方法是无状态的.字符串的内容不能被修改,方法只取决于字符串的内容及传递给方法 ...
- 使用Unity创造动态的2D水体效果
者:Alex Rose 在本篇教程中,我们将使用简单的物理机制模拟一个动态的2D水体.我们将使用一个线性渲染器.网格渲染器,触发器以及粒子的混合体来创造这一水体效果,最终得到可运用于你下款游戏的水纹和 ...
- Populating Next Right Pointers in Each Node
这题代码简单,不过不容易想到. void connect(TreeLinkNode *root) { if (root == nullptr ||root->left==nullptr)retu ...
- Apache同时支持PHP和Python的配置方法
一.http://www.oschina.net 网站中的一个问答内容: 原来把 WSGIScriptAlias / "D:/project/ddd/django.wsgi" ...
- 基于DCMTK的DICOM相关程序编写攻略
2008年09月10日 星期三 15:35 基于DCMTK的DICOM相关程序编写攻略 前言: 由于现在的医学影像设备的图像存储和传输正在逐渐向DICOM标准靠拢,在我们进行医学图像处理的过程中,经常 ...
- 15 day 1代碼
第一题 用堆维护. #include <cstdio> #include <algorithm> #include <queue> int n,i,f[400000 ...
- 《ASP.NET1200例》各种类型文件汇总
aspx是页面文件 ascx是用户控件,用户控件必须嵌入到aspx中才能使用. ascx是用户控件,相当于模板 其实ascx你可以理解为Html里的一部分代码, 只是嵌到aspx里而已, 因为aspx ...
- Remove Duplicates from Sorted List | & ||
Remove Duplicates from Sorted List I Given a sorted linked list, delete all duplicates such that eac ...
- ios 动态测定字符串frame : boundingRectWithSize函数
用NSString中的一个方法,第一个参数是text形成的frame的最大的宽度和高度, 其中的options比较关键 CGSize labelSize = [text boundingRectWit ...
- iOS7 status bar 样式问题
在ios7中,有如下status bar 样式 typedef NS_ENUM(NSInteger, UIStatusBarStyle) { UIStatusBarStyleDefault = , / ...