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点已经省掉的花费为 ...
随机推荐
- Excel导入导出,生成和下载Excel报表、附件等操作--ASP.NET
public class OutExcel { public static void OutExcel_bb(DataTable dt, string thepath, string temppath ...
- 在link的url里新增参数
(文章都是从我的个人主页上粘贴过来的,大家也可以访问我的主页 www.iwangzheng.com) <%= link_to image_tag("/images/icons/aaa. ...
- 百度图片爬虫-python版-如何爬取百度图片?
上一篇我写了如何爬取百度网盘的爬虫,在这里还是重温一下,把链接附上: http://www.cnblogs.com/huangxie/p/5473273.html 这一篇我想写写如何爬取百度图片的爬虫 ...
- mysql数据库性能优化(包括SQL,表结构,索引,缓存)
优化目标减少 IO 次数IO永远是数据库最容易瓶颈的地方,这是由数据库的职责所决定的,大部分数据库操作中超过90%的时间都是 IO 操作所占用的,减少 IO 次数是 SQL 优化中需要第一优先考虑,当 ...
- PXE介绍(PXE+kickstart无人值守安装)
PXE概念 PXE(Pre-boot Execution Environment,预启动执行环境)是由Intel公司开发的最新技术,工作于Client/Server的网络模式,支持工作站通过网络从远端 ...
- MFC获取系统当前时间的几种方法
1.使用CTime类 CString str; //获取系统时间 CTime tm; tm=CTime::GetCurrentTime(); str=tm.Format("现在时间是%Y年% ...
- 2模02day1题解
源文件在我的网盘上.链接:http://pan.baidu.com/s/1qWPUDRm 密码:k52e (只有机智的人才能看到我的链接) 机智的双重下划线~~~ T1 T1就是一个递推,这题目把我恶 ...
- urllib2加入header及解决中文乱码问题
def main(): url = "http://www.douban.com" #伪装桌面浏览器 headers = {'User-Agent':'Mozilla/5.0 (W ...
- js 去掉input标签中的百分号【%】
parseInt("100%") --100 parseFloat("17%") --17
- FZU 2148 moon game (计算几何判断凸包)
Moon Game Time Limit:1000MS Memory Limit:32768KB 64bit IO Format:%I64d & %I64u Submit St ...