http://acm.hdu.edu.cn/showproblem.php?pid=2992

题意:有n个城市,编号为(1~n),有一些城市中有一些旅店,要求从一个城市到另一个城市不能超过10小时,问能否从1号城市到n号城市,如果能需要住的最少的旅店数目是多少。

思路:首先将1号城市和n号城市置为有旅店的城市,spfa求每个旅店到其它旅店的最短距离,如果距离小于10小时,将两个旅店之间的权值置为1,这样就能构造出所有旅店之间的图,然后对该图利用floyd求最短路。

 #include <stdio.h>
#include <string.h>
#include <algorithm>
#include <queue>
#include <vector>
const int N=;
const int INF=<<;
using namespace std; struct node
{
int v,w;
node(int v,int w):v(v),w(w) {}
};
vector<node>vv[N];
int mp[][],id[N];
int a[N],dis[N];
bool vis[N];
int hotel,n;
void init()
{
memset(id,,sizeof(id));
for (int i = ; i <= hotel+; i++)
{
for (int j = ; j <= hotel+; j++)
{
mp[i][j] = INF;
}
mp[i][i] = ;
}
for (int i = ; i <= n; i++)
vv[i].clear();
}
void spfa(int s)
{
queue<int>q;
memset(vis,,sizeof(vis));
for (int i = ; i <= n; i++)
dis[i] = INF;
dis[s] = ;
q.push(s);
vis[s] = true;
while(!q.empty())
{
int u = q.front();
q.pop();
vis[u] = false;
for (int i = ; i < (int)vv[u].size(); i++)
{
int v = vv[u][i].v;
int w = vv[u][i].w;
if(dis[v]>dis[u]+w)
{
dis[v] = dis[u]+w;
if(!vis[v])
{
q.push(v);
vis[v] = true;
}
}
}
}
for (int i = ; i <= n; i++)
{
if (dis[i]<=)
mp[id[s]][id[i]] = ;
}
}
void floyd()
{
for (int k = ; k <= hotel+; k++)
{
for (int i = ; i <= hotel+; i++)
{
for (int j = ; j <= hotel+; j++)
if(mp[i][j] > mp[i][k]+mp[k][j])
mp[i][j] = mp[i][k]+mp[k][j];
}
}
}
int main()
{
while(scanf("%d",&n)&&n)
{
scanf("%d",&hotel);
init();
for (int i = ; i <= hotel; i++)
{
scanf("%d",&a[i]);
id[a[i]] = i;
}
a[] = ;
a[hotel+] = n;
id[] = ;
id[n] = hotel+;
int m,u,v,w;
scanf("%d",&m);
for (int i = ; i <= m; i++)
{
scanf("%d%d%d",&u,&v,&w);
vv[u].push_back(node(v,w));
vv[v].push_back(node(u,w));
}
for (int i = ; i <= hotel; i++)
spfa(a[i]);
floyd();
if (mp[][hotel+]>=INF)
puts("-1");
else
printf("%d\n",mp[][hotel+]-);
}
return ;
}

Hotel booking(spfa+floyd)的更多相关文章

  1. HDU 2992 Hotel booking(BFS+DFS 或者 SPFA+Floyd)

    点我看题目 题意 : 一个司机要从1点到达n点,1点到n点中有一些点有宾馆,司机的最长开车时间不能超过10小时,所以要在10小时之内找到宾馆休息,但是为了尽快的走到n点,问最少可以经过几个宾馆. 思路 ...

  2. PKU 1932 XYZZY(Floyd+Bellman||Spfa+Floyd)

    题目大意:原题链接 给你一张图,初始你在房间1,初始生命值为100,进入每个房间会加上那个房间的生命(可能为负),问是否能到达房间n.(要求进入每个房间后生命值都大于0) 解题思路: 解法一:Floy ...

  3. 最短路算法详解(Dijkstra/SPFA/Floyd)

    新的整理版本版的地址见我新博客 http://www.hrwhisper.me/?p=1952 一.Dijkstra Dijkstra单源最短路算法,即计算从起点出发到每个点的最短路.所以Dijkst ...

  4. hdu 1874 畅通工程续(模板题 spfa floyd)

    题目:http://acm.hdu.edu.cn/showproblem.php?pid=1874 spfa 模板 #include<iostream> #include<stdio ...

  5. POJ 1502 MPI Maelstrom( Spfa, Floyd, Dijkstra)

    题目大意: 给你 1到n ,  n个计算机进行数据传输, 问从1为起点传输到所有点的最短时间是多少, 其实就是算 1 到所有点的时间中最长的那个点. 然后是数据 给你一个n 代表有n个点, 然后给你一 ...

  6. hdu 2992 Hotel booking

    http://acm.hdu.edu.cn/showproblem.php?pid=2992 #include <cstdio> #include <cstring> #inc ...

  7. 几个小模板:topology, dijkstra, spfa, floyd, kruskal, prim

    1.topology: #include <fstream> #include <iostream> #include <algorithm> #include & ...

  8. 四大算法解决最短路径问题(Dijkstra+Bellman-ford+SPFA+Floyd)

    什么是最短路径问题? 简单来讲,就是用于计算一个节点到其他所有节点的最短路径. 单源最短路算法:已知起点,求到达其他点的最短路径. 常用算法:Dijkstra算法.Bellman-ford算法.SPF ...

  9. POJ 1932 XYZZY (ZOJ 1935)SPFA+floyd

    http://poj.org/problem?id=1932 http://acm.zju.edu.cn/onlinejudge/showProblem.do?problemCode=1935 题目大 ...

随机推荐

  1. php第二十三节课

    XML XML:页面之间传递数据,跨平台传递 HTML:超文本标记语言,核心标签 XML特点:1.标签名可以自己定义2.有且只有一个根3.大小写敏感4.标签必须完整 <!DOCTYPE html ...

  2. 10JDBC、CURD、XML、XPath

    10JDBC.CURD.XML.XPath-2018/07/20 1.JDBC JDBC:java database connectivity JDBC与数据库驱动的关系:接口与实现的关系. JDBC ...

  3. Radar Installation POJ - 1328 (贪心)

    题目大意(vj上的翻译版本) 假定海岸线是无限长的直线.陆地位于海岸线的一侧,海洋位于另一侧.每个小岛是位于海洋中的一个点.对于任何一个雷达的安装 (均位于海岸线上),只能覆盖 d 距离,因此海洋中的 ...

  4. Object类型转换为String类型

    1. Object.toString() 1 obj.toString() 注意:必须保证Object不是null值,否则将抛出NullPointerException异常. 2. (String)O ...

  5. Oracle 密码文件

    一.密码文件 作用:主要进行DBA权限的身份认证 DBA用户:具有sysdba,sysoper权限的用户被称为dba用户.默认情况下sysdba角色中存在sys用户,sysoper角色中存在syste ...

  6. Python学习笔记 (2)变量、常量和数据类型

    变量 顾名思义,变量就是一个会变的量,用一个变量名表示,指向内存中一片区域,而指向的区域存的是什么,这个变量就是什么数据类型,和C/C++挺不一样的.变量数据类型可以通过赋值变来变去(这就叫动态语言, ...

  7. Remmarguts’ Date(poj 2449)

    求第k短路的长度,如果没有,输出-1. /* k短路模板 注意当s=t时,k++. */ #include<iostream> #include<cstdio> #includ ...

  8. MEAN,从MONGO DB里弄出点东东来啦,以REST风格显示JSON

    最近一直在弄弄的... javascript的风格弄熟了,我觉得肯定很快,,但心中有种感觉,DJANGO和MEAN这种结构,搞大的不行. 因为MVC这种结构感觉不如SPRING这些严谨,是不是我有偏见 ...

  9. [bzoj3893][Usaco2014 Dec]Cow Jog_暴力

    Cow Jog bzoj-3893 Usaco-2014 Dec 题目大意:题目链接. 注释:略. 想法: 先按照坐标排序. 我们发现每个牛只会被后面的牛影响. 所以我们考虑逆向枚举. 记录一下i+1 ...

  10. Centos7: 设置UTC时区

    timedatectl set-timezone UTC