UVA-10269 Adventure of Super Mario (dijkstra)
题目大意:有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)的更多相关文章
- UVA 10269 Adventure of Super Mario
看了这里 http://blog.csdn.net/acm_cxlove/article/details/8679230的分析之后自己又按照自己的模板写了一遍,算是对spfa又加深了一步认识(以前真是 ...
- UVa 10269 Adventure of Super Mario (Floyd + DP + BFS)
题意:有A个村庄,B个城市,m条边,从起点到终点,找一条最短路径.但是,有一种工具可以使人不费力的移动L个长度,但始末点必须是城市或村庄.这种工具有k个,每个只能使用一次,并且在城市内部不可使用,但在 ...
- 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] ...
- zoj1232Adventure of Super Mario(图上dp)
题目连接: 啊哈哈.点我点我 思路: 这个题目是一个图上dp问题.先floyd预处理出图上全部点的最短路,可是在floyd的时候,把可以用神器的地方预处理出来,也就是转折点地方不能为城堡..预处理完成 ...
- UVA10269 Adventure of Super Mario(Floyd+DP)
UVA10269 Adventure of Super Mario(Floyd+DP) After rescuing the beautiful princess, Super Mario needs ...
- 迪杰斯特拉(dijkstra)算法的简要理解和c语言实现(源码)
迪杰斯特拉(dijkstra)算法:求最短路径的算法,数据结构课程中学习的内容. 1 . 理解 算法思想::设G=(V,E)是一个带权有向图,把图中顶点集合V分成两组,第一组为已求出最短路径的顶点集合 ...
- 最短路径之迪杰斯特拉(Dijkstra)算法
迪杰斯特拉(Dijkstra)算法主要是针对没有负值的有向图,求解其中的单一起点到其他顶点的最短路径算法.本文主要总结迪杰斯特拉(Dijkstra)算法的原理和算法流程,最后通过程序实现在一个带权值的 ...
- 理解最短路径——迪杰斯特拉(dijkstra)算法
原址地址:http://ibupu.link/?id=29 1. 迪杰斯特拉算法简介 迪杰斯特拉(dijkstra)算法是典型的用来解决最短路径的算法,也是很多教程中的范例,由荷兰计算机科 ...
- 图论——迪杰斯特拉算法(Dijkstra)实现,leetcode
迪杰斯特拉算法(Dijkstra):求一点到另外一点的最短距离 两种实现方法: 邻接矩阵,时间复杂度O(n^2) 邻接表+优先队列,时间复杂度O(mlogn)(适用于稀疏图) (n:图的节点数,m:图 ...
随机推荐
- web Servlet 3.0 新特性之web模块化编程,web-fragment.xml编写及打jar包
web Servlet 3.0 模块化 原本一个web应用的任何配置都需要在web.xml中进行,因此会使得web.xml变得很混乱,而且灵活性差,因此Servlet 3.0可以将每个Servlet. ...
- vue的ref与$refs
一. ref使用在父组件上 父组件html: <information ref='information'></information> import information ...
- 最好的 Xcode 自动生成版本号技术
在 bloglovin ,我们使用自动生成版本号来设置Xcode,使当前的版本号为在Git活跃的分支上 的提交数.它一直正常工作着,但我们的技术也不是一帆风顺的. 糟糕的老方法 我们使用的技术是来自一 ...
- 论文笔记:Batch Normalization: Accelerating Deep Network Training by Reducing Internal Covariate Shift
ICML, 2015 S. Ioffe and C. Szegedy 解决什么问题(What) 分布不一致导致训练慢:每一层的分布会受到前层的影响,当前层分布发生变化时,后层网络需要去适应这个分布,训 ...
- TOSCA自动化测试工具视频资料
https://www.udemy.com/ search 'TOCSA' 找到两个免费资料学习
- 利用arcgis制作出 源解析要用的ASCII文件
准备:1.确定好模拟区域范围,精度,行列数 2.确定好源解析的城市规划 思路: 1.全国省级图+本地市县图-->合成一张区域图(联合) 合成之后,添加一个字段,一个数字类型字段 ...
- 前端使用html2canvas截图,在canvas上绘制图片及保存图片
1.使用html2canvas 存在的问题: 不同的机型绘制位置不同的问题. 这个主要因为Html动态设置了html的dpr.(dpr可以解决屏幕显示不了1pxborder和无法显示小于12px的文字 ...
- iOS开发之HelloKit代码片段
完整代码托管:https://github.com/1042710553/HelloKit.git /************************/plist/****************** ...
- iOS开发之XMPPFramework环境搭建和配置
1.mysql数据库安装和配置 官方下载地址:http://www.mysql.com/downloads/ 百度云盘地址: 安装软件参考:http://www.cnblogs.com/macro-c ...
- Swift学习笔记 - OC中关于NSClassFromString获取不到Swift类的解决方案
在OC和Swift混编的过程中发现在OC中通过NSClassFromString获取不到Swift中的类,调研了一下发现问题所在,下面是我的解决方案: 问题的发现过程 UIViewController ...