ZOJ-2913 Bus Pass---BFS进阶版
题目链接:
https://vjudge.net/problem/ZOJ-2913
题目大意:
问哪个区域到公交路线上所有区域的最大距离最小
思路:
这里要求出到底是哪个区域到某些指定区域的最大距离最小,最开始想到的是每个两个点求出距离,但是点数很多,不现实,又想到枚举所有区域到指定区域的距离,此果正向求是做不到的,应该反向求解,对指定区域进行BFS,求这些区域到其他所有区域的最短路,由于道路是双向的,求出的这些最短路程也就是所有点到指定区域的最短路程,对于每个点,保存它到指定区域的最大距离,最后在这些最大距离中找出最小的距离以及该区域的编号。
有几个易错点:
vis数组在第一个节点加入队列中就要开始标记第一个元素已经入队了。
更新最大距离是,应该在每次取出头结点的时候更新,不能在加入队列的时候更新(除非额外更新第一个节点),因为加入队列的事后更新的话,最开始的那个已经入队的节点的最大距离没有更新,这一点很重要
#include<iostream>
#include<cstdio>
#include<cstring>
#include<algorithm>
#include<cmath>
#include<queue>
#include<stack>
#include<map>
#include<set>
#include<sstream>
#include<functional>
using namespace std;
typedef long long ll;
const int maxn = 1e4 + ;
const int INF = 1e9 + ;
int T, n, m, cases;
int ans[maxn];//ans[i]保存着从i点出发到线路上的所有点的时间中的最大时间
int Map[maxn][];//邻接表
bool vis[maxn];
struct node
{
int x, time;
node(){}
node(int x, int time):x(x), time(time){}
};
void bfs(int u)
{
queue<node>q;
//cout<<"---------"<<u<<"-----------"<<endl;
q.push(node(u, ));
memset(vis, , sizeof(vis));
vis[u] = ;
while(!q.empty())
{
node now = q.front();
q.pop();
ans[now.x] = max(ans[now.x], now.time);
//cout<<now.x<<" "<<now.time<<endl;
for(int i = ; i < ; i++)
{
if(Map[now.x][i] <= )break;
node next(Map[now.x][i], now.time + );
if(vis[next.x])continue;
vis[next.x] = ;
//ans[next.x] = max(ans[next.x], next.time);
q.push(next);
}
}
}
set<int>s;
int main()
{
cin >> T;
while(T--)
{
scanf("%d%d", &n, &m);
s.clear();
memset(Map, -, sizeof(Map));
memset(ans, -, sizeof(ans));
int x, tot;
for(int i = ; i < n; i++)
{
scanf("%d%d", &x, &tot);
s.insert(x);
for(int j = ; j < tot; j++)
{
scanf("%d", &Map[x][j]);
}
}
for(int i = ; i < m; i++)
{
scanf("%d", &x);
for(int i = ; i < x; i++)
{
scanf("%d", &tot);
bfs(tot);
}
}
int minsum = INF, mi;
for(set<int>::iterator it = s.begin(); it != s.end(); ++it)
{
if(minsum > ans[*it])
{
mi = *it;
minsum = ans[*it];
}
}
printf("%d %d\n", minsum, mi);
}
return ;
}
ZOJ-2913 Bus Pass---BFS进阶版的更多相关文章
- ZOJ 2913 Bus Pass (近期的最远BFS HDU2377)
题意 在全部城市中找一个中心满足这个中心到全部公交网站距离的最大值最小 输出最小距离和满足最小距离编号最小的中心 最基础的BFS 对每一个公交网站BFS dis[i]表示编号为i的点到全部公交网 ...
- zoj 2913 Bus Pass
对于每个输入的站点求出所有点到这个站点的最短路.用anss数组存下来,然后就可以用anss数组求出答案了. 题目分析清楚了 还是比较水的,折腾了一早上.. #include<stdio.h> ...
- Bus Pass
ZOJ Problem Set - 2913 Bus Pass Time Limit: 5 Seconds Memory Limit: 32768 KB You travel a lot b ...
- ZOJ2913Bus Pass(BFS+set)
Bus Pass Time Limit: 5 Seconds Memory Limit: 32768 KB You travel a lot by bus and the costs of ...
- python--代码统计(进阶版)
在上一篇的随笔中发表了代码统计小程序,但是发表后,我发现,以前写的代码怎么办 写了那么多,怎么就从0开始了呢,,,,我还是个孩子啊,不能这么残忍 于是,代码统计进阶版:统计当前目录下所有指定文件类型的 ...
- python三级菜单实例(傻瓜版和进阶版)
程序: python三级菜单 要求: : 1.打印省.市.县三级菜单 2.可返回上一级 3.可随时退出程序 方案一:傻瓜版(其实傻瓜版考察的主要是思路!思路清楚了,那才不是傻瓜!O(∩_∩)O哈哈~) ...
- hdu 2377 Bus Pass
Bus Pass Time Limit: 10000/5000 MS (Java/Others) Memory Limit: 32768/32768 K (Java/Others)Total S ...
- zip伪加密文件分析(进阶版)
作者近日偶然获得一misc题,本来以为手到擒来,毕竟这是个大家都讨论烂了的题,详情访问链接http://blog.csdn.net/ETF6996/article/details/51946250.既 ...
- webpack4打包nodejs项目进阶版——多页应用模板
前段时间我写了个打包nodejs项目的文章,点击前往 但是,问题很多.因为之前的项目是个历史遗留项目,重构起来可能会爆炸,当时又比较急所以就写个的适用范围很小的webpack的打包方法. 最近稍微得空 ...
- 手机端页面自适应解决方案—rem布局进阶版
手机端页面自适应解决方案—rem布局进阶版 https://www.jianshu.com/p/985d26b40199 注:本文转载之处:https://www.cnblogs.com/anni ...
随机推荐
- select子句和三种子查询
一.select子句 五种子句 Where.group by.having.order by.limit Where.group by.having.order by.limit运用的这个顺序不能变 ...
- 斗地主案例(利用集合/增强for等技术)
斗地主案例(利用集合/增强for等技术) package Task10; import java.util.ArrayList; import java.util.Collections; publi ...
- MySQL 中添加列、修改列以及删除列
ALTER TABLE:添加,修改,删除表的列,约束等表的定义. 查看列:desc 表名; 修改表名:alter table t_book rename to bbb; 添加列:); 删除列:alte ...
- 面试长谈的String,StringBuffer,StringBuilder三兄弟有啥区别
1.String: /** Strings are constant; their values cannot be changed after they * are created. String ...
- linux --> 为什么寄存器比内存快?
为什么寄存器比内存快 计算机的存储层次(memory hierarchy)之中,寄存器(register)最快,内存其次,最慢的是硬盘. 原因一:距离不同 距离不是主要因素,但是最好懂,所以放在最前面 ...
- 生产者/消费者问题的多种Java实现方式
实质上,很多后台服务程序并发控制的基本原理都可以归纳为生产者/消费者模式,而这是恰恰是在本科操作系统课堂上老师反复讲解,而我们却视而不见不以为然的.在博文<一种面向作业流(工作流)的轻量级可复用 ...
- 『BUG』Android Studio 64位 始终提示 JVM 启动不了,JDK配置失败,error code -1
前几天 安装了 Android Studio 2.2. 本来一切都好,但是当我修改了 配置文件 studio64.exe.vmoptions 想修改 最大内存(保证运行流畅)后,AS 就再也运行不了了 ...
- c语言最后一次作业
1.当初你是如何做出选择计算机专业的决定的? 我再来到大学之前,通过查询和询问,了解到当前计算机行业就业需求量较高,同时我对计算机的几年过去比较高了,在高中时期就有过在大学学习计算机行业的知识与专业的 ...
- [高级软件工程教学]团队Beta阶段成绩汇总
一.作业地址: https://edu.cnblogs.com/campus/fzu/AdvancedSoftwareEngineering/homework/1501 二.Beta冲刺课堂答辩 1. ...
- C语言第二次作业---分支结构
一.PTA实验作业 题目1:计算分段函数[2] 1.实验代码 double x,y; scanf("%lf",&x); if(x>=0){ y=sqrt(x); } ...