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

题目分析:在城市内部不可使用但在村庄内部可使用的意思就是使用这种工具可以穿过多个村庄(如果长度允许)但不可穿过多个城市,即在使用这种工具的始末点之间可以有多个村庄但不可以有城市,无论始末点是什么。这样,可以先处理出任意两个城市或村庄之间的最短距离(中间不允许经过城市),然后再dijkstra。

代码如下:

# include<iostream>
# include<cstdio>
# include<queue>
# include<vector>
# include<cstring>
# include<algorithm>
using namespace std;
# define REP(i,s,n) for(int i=s;i<n;++i)
# define CL(a,b) memset(a,b,sizeof(a))
# define CLL(a,b,n) fill(a,a+n,b) const int INF=1<<30;
struct Node
{
int u,k;
Node(int _u,int _k):u(_u),k(_k){}
};
int n,m,A,B,L,K,d[105][12],vis[105][12],G[105][105]; int dijkstra()
{
REP(i,0,n) REP(j,0,K+1) d[i][j]=INF;
CL(vis,0);
queue<Node>q;
d[n-1][K]=0;
vis[n-1][K]=1;
q.push(Node(n-1,K));
while(!q.empty())
{
Node top=q.front();
q.pop();
int u=top.u,k=top.k;
REP(v,0,n){ if(G[u][v]==INF||v==u) continue;
if(d[v][k]>d[u][k]+G[u][v]){
d[v][k]=d[u][k]+G[u][v];
if(!vis[v][k]){
vis[v][k]=1;
q.push(Node(v,k));
}
}
if(k>0&&L>=G[u][v]&&d[v][k-1]>d[u][k]){
d[v][k-1]=d[u][k];
if(!vis[v][k-1]){
vis[v][k-1]=1;
q.push(Node(v,k-1));
}
}
}
vis[u][k]=0;
}
int ans=INF;
REP(i,0,K+1) ans=min(ans,d[0][i]);
return ans;
} void floyd()
{
REP(k,0,A) REP(i,0,n) REP(j,0,n)
if(G[i][k]!=INF&&G[k][j]!=INF&&G[i][j]>G[i][k]+G[k][j])
G[i][j]=G[i][k]+G[k][j];
} int main()
{
int T,a,b,c;
scanf("%d",&T);
while(T--)
{
scanf("%d%d%d%d%d",&A,&B,&m,&L,&K);
n=A+B;
REP(i,0,n) REP(j,0,n) G[i][j]=INF;
while(m--)
{
scanf("%d%d%d",&a,&b,&c);
--a,--b;
G[a][b]=G[b][a]=min(G[a][b],c);
}
floyd();
printf("%d\n",dijkstra());
}
return 0;
}

  

UVA-10269 Adventure of Super Mario (dijkstra)的更多相关文章

  1. UVA 10269 Adventure of Super Mario

    看了这里 http://blog.csdn.net/acm_cxlove/article/details/8679230的分析之后自己又按照自己的模板写了一遍,算是对spfa又加深了一步认识(以前真是 ...

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

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

  3. 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] ...

  4. zoj1232Adventure of Super Mario(图上dp)

    题目连接: 啊哈哈.点我点我 思路: 这个题目是一个图上dp问题.先floyd预处理出图上全部点的最短路,可是在floyd的时候,把可以用神器的地方预处理出来,也就是转折点地方不能为城堡..预处理完成 ...

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

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

  6. 迪杰斯特拉(dijkstra)算法的简要理解和c语言实现(源码)

    迪杰斯特拉(dijkstra)算法:求最短路径的算法,数据结构课程中学习的内容. 1 . 理解 算法思想::设G=(V,E)是一个带权有向图,把图中顶点集合V分成两组,第一组为已求出最短路径的顶点集合 ...

  7. 最短路径之迪杰斯特拉(Dijkstra)算法

    迪杰斯特拉(Dijkstra)算法主要是针对没有负值的有向图,求解其中的单一起点到其他顶点的最短路径算法.本文主要总结迪杰斯特拉(Dijkstra)算法的原理和算法流程,最后通过程序实现在一个带权值的 ...

  8. 理解最短路径——迪杰斯特拉(dijkstra)算法

    原址地址:http://ibupu.link/?id=29 1.       迪杰斯特拉算法简介 迪杰斯特拉(dijkstra)算法是典型的用来解决最短路径的算法,也是很多教程中的范例,由荷兰计算机科 ...

  9. 图论——迪杰斯特拉算法(Dijkstra)实现,leetcode

    迪杰斯特拉算法(Dijkstra):求一点到另外一点的最短距离 两种实现方法: 邻接矩阵,时间复杂度O(n^2) 邻接表+优先队列,时间复杂度O(mlogn)(适用于稀疏图) (n:图的节点数,m:图 ...

随机推荐

  1. 论文笔记:IRGAN——A Minimax Game for Unifying Generative and Discriminative Information

    2017 SIGIR 简单介绍 IRGAN将GAN用在信息检索(Information Retrieval)领域,通过GAN的思想将生成检索模型和判别检索模型统一起来,对于生成器采用了基于策略梯度的强 ...

  2. mysql外键约束无法删除数据的情况解决办法

    先删除子表的数据,然后再删除主表的数据.

  3. vux在ISO中异常 this.$vux.confirm.show

    在按钮事件中调用this.$vux.confirm.show,并且启用按钮的show-loading属性 安卓正常,ios中弹窗无法显示 经过排查,iso中设置按钮的loading后,要用异步setT ...

  4. C++之图片旋转90,再保存

    下面测试代码只需要全部放在一个.cpp文件里就行 //#include "stdafx.h"#include <stdio.h>#include <string& ...

  5. [入坑系列] Mybatis 中$与#的区别

    1.理解 1 #是将传入的值当做字符串的形式,eg:select id,name,age from student where id =#{id},当前端把id值1,传入到后台的时候,就相当于 sel ...

  6. TCP/UDP 端口

    端口说明 小于1024的端口通常运行一些网络服务 大于1024的端口用来与远程机器建立连接 TCP端口 = 回显 = 丢弃 = 在线用户 = 时间服务 = 网络状态 = 每日引用 = 消息发送 = 字 ...

  7. 20145302张薇《Java程序设计》第七周学习总结

    20145302 <Java程序设计>第七周学习总结 教材学习内容总结 第十三章 时间的度量 Greenwich Mean Time,格林威治时间,简称GMT时间,由观察太阳而得来: Un ...

  8. ubuntu 18.04 64bit下如何安装python开发工具jupyter

    1.执行一下命令进行安装 sudo apt-get install python3-distutils wget https://bootstrap.pypa.io/get-pip.py sudo p ...

  9. Android 7.1 快捷方式 Shortcuts

    转载请注明出处:王亟亟的大牛之路 前些天就看到相关内容了,但是最近吸毒比较深(wow),所以没有紧跟潮流,今天补一篇. 先安利:https://github.com/ddwhan0123/Useful ...

  10. webservice获取天气信息

    效果 1.eclipse中新建一个Java项目 2.通过命名获取天气的客户端信息 首先,打开天气网站http://ws.webxml.com.cn/WebServices/WeatherWS.asmx ...