1131(★、※)Subway Map
思路:DFS遍历
#include <iostream>
#include <map>
#include <vector>
#include <cstdio>
using namespace std; const int INF = 0x7fffffff;
const int maxn = ; struct Node{
int line, s, e;
Node(int xl, int xs, int xe) :line(xl), s(xs), e(xe) {}
}; struct WhichLine {
int u, v;
WhichLine(int _u, int _v) :u(_u), v(_v) {}
friend bool operator <(WhichLine a,WhichLine b) {//const whichLine &a, const whichLine &b
//如果只是whichLine &a, whichLine &b报错
if (a.u != b.u) return a.u < b.u;
else return a.v < b.v;
}
};
map<WhichLine, int> searchLine;//判断两个站点在哪条线上
vector<int> G[maxn];//图的邻接表
bool visit[maxn];//判断是否已经访问数组
int minStation, minTransfer;//最少的站点,最少的换乘
vector<Node> ans, temp;//最终结果路径和中间记录路径
int st, ed; void DFS(int head, int now, int stationCnt, int pre) {
if (now == ed) {
if (stationCnt < minStation || stationCnt == minStation && temp.size() < minTransfer) {
minStation = stationCnt;
minTransfer = temp.size();
ans = temp;
ans.push_back(Node(searchLine[WhichLine(pre, now)], head, now));
return;
}
} visit[now] = true;
for (auto next : G[now]) {
if (visit[next]) continue;
if (pre != now && searchLine[WhichLine(pre, now)] != searchLine[WhichLine(now, next)]) { temp.push_back(Node(searchLine[WhichLine(pre, now)], head, now));
DFS(now, next, stationCnt + , now);
temp.pop_back();
}
else DFS(head, next, stationCnt + , now);
} visit[now] = false;
} int main(){
int n;
scanf("%d", &n);
for (int i = ; i <= n; ++i){
int k, u, v;
scanf("%d", &k);
for (int j = ; j < k; j++) {
scanf("%d", &v);
if (j > ) {
searchLine[WhichLine(u, v)] = i;//两个相邻节点的线路
searchLine[WhichLine(v, u)] = i;
G[u].push_back(v);
G[v].push_back(u);
}
u = v;
}
}
int q;
scanf("%d", &q);
while (q--){
scanf("%d %d", &st, &ed);
minStation = minTransfer = INF;
DFS(st, st, , st);
printf("%d\n", minStation);
for (auto x : ans) printf("Take Line#%d from %04d to %04d.\n", x.line, x.s, x.e);
}
return ;
}
1131(★、※)Subway Map的更多相关文章
- Java集合(十)实现Map接口的HashMap
Java集合(十)继承Map接口的HashMap 一.HashMap简介(基于JDK1.8) HashMap是基于哈希表(散列表),实现Map接口的双列集合,数据结构是“链表散列”,也就是数组+链表 ...
- .NET Core中间件的注册和管道的构建(3) ---- 使用Map/MapWhen扩展方法
.NET Core中间件的注册和管道的构建(3) ---- 使用Map/MapWhen扩展方法 0x00 为什么需要Map(MapWhen)扩展 如果业务逻辑比较简单的话,一条主管道就够了,确实用不到 ...
- [SoapUI] Post请求Body里面限制特殊字符(&、%),Groovy脚本里特殊字符需要添加“\”转义($)。
SoapUI的Post请求,在body里面不能包含(&.%),如果含有这些特殊字符,请求会报错:在添加的Groovy脚本里有些特殊字符需要使用“\”转义($),不然也会报错.
- 从头认识java-15.1 填充容器(3)-填充Map
这一章节我们来讨论一下填充容器的还有一个方面Map.之前的两个章节我们都是用list来作为容器.这一章节我们使用Map. 还有在这里解释一下为什么一直都使用生成器这个东西,事实上他就是建造者设计模式, ...
- Javase之集合体系(4)之Map集合
集合体系之Map集合 ##Map<K,V>( 接口 ) 特点:将键映射到值对象,一个映射不能包含重复的键:每个键只能映射一个值 Map集合与Collection集合的区别 Map集合存 ...
- 【Go入门教程2】内置基础类型(Boolean、数值、字符串、错误类型),分组,iota枚举,array(数值),slice(切片),map(字典),make/new操作,零值
这小节我们将要介绍如何定义变量.常量.Go内置类型以及Go程序设计中的一些技巧. 定义变量 Go语言里面定义变量有多种方式. 使用var关键字是Go最基本的定义变量方式,与C语言不同的是Go把变量类型 ...
- 【Android】RxJava的使用(三)转换——map、flatMap
前两篇Android RxJava的使用(一)基本用法.Android RxJava的使用(二)Action介绍了RxJava的基本用法,对Rxjava还不了解的请先看以上两篇.这篇为大家讲解RxJa ...
- 【Go入门教程4】变量(var),常量(const),内置基础类型(Boolean、数值 byte,int,rune、字符串、错误类型),分组,iota枚举,array(数值),slice(切片),map(字典),make/new操作,零值
这小节我们将要介绍如何定义变量.常量.Go 内置类型以及 Go 程序设计中的一些技巧. 定义变量 Go 语言里面定义变量有多种方式. 使用 var 关键字是 Go 最基本的定义变量方式,与 C 语言不 ...
- (转)百度Map API
转自 http://blog.sina.com.cn/s/blog_6079f38301013sb3.html 一.与地图操作相关的接口哦! (这些接口的开启都是写在执行成功的回调函数那里) map ...
随机推荐
- php如何以post形式发送xm并返回xmll数据
post的数据为xml字符串,通过 $xml = simplexml_load_string($post_data);转换成xml对象 $header[] = "Content-type: ...
- 使用pca/lda降维
PCA主成分分析 import numpy as np import pandas as pd import matplotlib.pyplot as plt # 用鸢尾花数据集 展示 降维的效果 f ...
- Dockerfile命令大全
Dockerfile 制作Dockerfile为Docker入门学习的第一步. Dockerfile可以快速的帮助我们去构建镜像, 是在工作中必备的一项技能, 下面整理了一些命令 FROM 功能为指定 ...
- Oracle的sql导入
sqlldr: 一般用于导入以任何后缀结束的文件,我这次就是因为要导入一张以.20160101为后缀的文件,当初简直束手无策 结合input.ctl使用,可以在DOS下使用,可以对一张表导入数十万,百 ...
- 详细解析HTML基础结构
<!DOCTYPE html> <html> <head> <meta charset="UTF-8"> <title> ...
- ABAP基础一:ALV基础之ALV的整体结构
很久没摸ECC了,最近看到很多新人在捯饬ALV...中国就喜欢量产垃圾...培训,上岗...没有行业道德... 闲话不多说,开始正事: ALV很常见,在SAP非WEB的项目,没有不用的,它包含了报表和 ...
- linux下无root 安装activepython到指定目录
linux下无root 安装activepython 1.下载ActivePython-2.7.8.10-linux-x86_64.tar.gz 包 2.进入非root用户,如bdc用户,解压 [bd ...
- python画箱线图
# -*- coding: utf-8 -*- """ Created on Wed Jun 14 13:00:11 2017 @author: Miao "& ...
- 1095 解码PAT准考证
PAT 准考证号由 4 部分组成: 第 1 位是级别,即 T 代表顶级:A 代表甲级:B 代表乙级: 第 2~4 位是考场编号,范围从 101 到 999: 第 5~10 位是考试日期,格式为年.月. ...
- java中一些对象(po,vo,dao,pojo)等的解释
一.PO:persistant object 持久对象,可以看成是与数据库中的表相映射的java对象.最简单的PO就是对应数据库中某个表中的一条记录,多个记录可以用PO的集合.PO中应该不包含任何对 ...