PAT甲级 1131 - Subway Map
Each station interval belongs to a unique subway line.
这句话比较重要,所以在进行dfs的时候记录区间,会方便很多。
#include<bits/stdc++.h>
using namespace std;
const int maxn=10000+10;
vector<pair<int,int> >vp;
int temp[maxn][maxn];
vector<int> ansLine,line,edge[maxn];
vector<pair<int,int> > ansStation,routine;
vector<pair<int,pair<int,int> > >vpp;
bool visited[maxn];
void init(){ansLine.clear();line.clear();ansStation.clear();routine.clear();vpp.clear();fill(visited,visited+maxn,false);
}void output(){vector<int>::iterator it=ansLine.begin();vector<pair<int,int> >::iterator its=ansStation.begin();int pre = *it,s=its->first,e=its->second;for(it=it+1,its=its+1;it!=ansLine.end();++it,++its){if(*it!=pre){vpp.push_back(make_pair(pre,make_pair(s,e)));pre=*it;s=its->first;}e=its->second;}vpp.push_back(make_pair(pre,make_pair(s,e)));printf("%d\n",ansStation.size());for(vector<pair<int,pair<int,int> > >::iterator ite=vpp.begin();ite!=vpp.end();++ite){printf("Take Line#%d from %04d to %04d.\n",ite->first,(ite->second).first,(ite->second).second);}
}int getTransferNum(vector<int> v){int transfers=1;vector<int>::iterator it = v.begin();int pre = *it;for(it=it+1;it!=v.end();++it){if(*it!=pre){++transfers;pre=*it;}}return transfers;
}bool isAssign(){if(getTransferNum(ansLine) > getTransferNum(line) )return true;return false;
}void dfs(int s,int e){if(s==e){bool flag=false;if(ansStation.empty())flag=true;if(!ansStation.empty()){if(routine.size()<ansStation.size())flag=true;else if(routine.size() == ansStation.size() && isAssign()) flag=true;}if(flag){ansStation.assign(routine.begin(),routine.end());ansLine.assign(line.begin(),line.end());}return;}for(vector<int>::iterator it=edge[s].begin();it!=edge[s].end();++it){if(!visited[*it]){line.push_back(temp[s][*it]);routine.push_back(make_pair(s,*it));visited[*it]=true;dfs(*it,e);visited[*it]=false;routine.pop_back();line.pop_back();}}
}
int main(){int n,m,u,v;scanf("%d",&n);for(int i=0;i<n;++i){scanf("%d",&m);u=-1;for(int j=0;j<m;++j){scanf("%d",&v);if(u!=-1){temp[v][u]=temp[u][v]=i+1;edge[u].push_back(v);edge[v].push_back(u);}u=v;}}int k;scanf("%d",&k);for(int i=0;i<k;++i){scanf("%d %d",&u,&v);dfs(u,v);output();init();}return 0;
}
PAT甲级 1131 - Subway Map相关推荐
- PAT甲级1131 Subway Map (30分):[C++题解]堆优化dijkstra、单源最短路、地铁地图、巧妙地建图套dijkstra模板!!
文章目录 题目分析 题目链接 题目分析 原题: 来源:acwing 分析: 建图:所有能走到的点之间建立一条边,比如下面一条地铁线路有4站,它们是相通的,两两之间建一条边,边权是经过的站点数. 下面考 ...
- PAT 1131. Subway Map (30) DFS
1131. Subway Map (30) 时间限制 400 ms 内存限制 65536 kB 代码长度限制 16000 B 判题程序 Standard 作者 CHEN, Yue In the big ...
- PAT甲级1111 Online Map (30分):[C++题解]两次dijkstra求单源最短路、保存路径、长度最短、时间最短
文章目录 题目分析 题目链接 题目分析 来源:acwing 分析:dijkstra求单源最短路的题目. 只是写两遍而已,第一遍求按照路径长度求,第二遍按照时间最少求. 另外加一个vector路径的判断 ...
- 1131. Subway Map (30)-PAT甲级真题 (DFS or 堆优化dij or SPFA)
题意 给出地铁线路数n,分别给出每条线的站点数m,再依次列出站点id.然后询问k次从启点sv到终点ev的最短路径,如果最短路径相同,要求换乘最少的路径.最后按条件输出. 思路 1.用unordered ...
- 【PAT甲级】1131 Subway Map
✍个人博客:https://blog.csdn.net/Newin2020?spm=1011.2415.3001.5343
- 1131 Subway Map (30分)/最短路径问题
题目描述 In the big cities, the subway systems always look so complex to the visitors. To give you some ...
- 1131 Subway Map (30 分)
做不出来,一开始打算和Online map一样,用邻接表的dij做,但是发现这个交叉站点不好表示(用了二维数组存但不理想,超时超限). 没想到10e5竟然能用dfs做. 本题细节: 1.关于两站位于的 ...
- PAT甲级1016 (map,排序)
题目 A long-distance telephone company charges its customers by the following rules: Making a long-dis ...
- 1131 Subway Map
题目 题意: 找出一条路线,使得对任何给定的起点和终点,可以找出中途经停站最少的路线:如果经停站一样多,则取需要换乘线路次数最少的路线 tip:DFS + map 分析:0.可以这样计算出一条线路的换 ...
最新文章
- Learn OpenGL (二):三角形
- java List接口
- Visual Studio 配色方案
- 27岁博士毕业,32岁成清华博导!黄高助理教授:DenseNet发明者
- SQL Server审核最佳做法
- Spring Security xsd 异常
- matlab2c使用c++实现matlab函数系列教程-asin函数
- 计算机工作组如何添加打印机,局域网添加打印机,详细教您局域网打印机怎么添加...
- 快速低成本的组建Symbian团队(使用pys60)
- close 和 shutdown 的差别
- H-Chat:用户私聊群聊管理
- STM32F4系列单片机选型详解
- tokenpocket内网页获取用户钱包信息
- input type=“radio“默认按钮选中状态
- Mac Tomcat安装 localhost 拒绝了我们的连接请求
- RHCS基本理論(台湾人写的不错的文章)
- Records of Reinfocement Learning Experiments
- agv ti 毫米波雷达_一种基于毫米波雷达的AGV小车的制作方法
- 直流电机(BLDC)转速和频率的计算关系
- windows10 安装msdatlst.ocx控件
热门文章
- Suspicious URL pattern: [/druid/**] ,进入不了druid的后台
- C语言英文背单词软件,C语言背单词程序
- PostCSS received undefined instead of CSS string
- 评价指标(metrics)
- Java二叉树和红黑树
- 常垒·会客厅:医保局时代下的医院智能数据大变革
- greendao 默认数据库db 生成路径,以及db文件导出
- 程序员的半衰期只有15年
- 译书《物联网实战指南》出版 | 新成就:翻译自己的英文简介
- 【5分钟教你】3种实现验证码功能-数字短信验证码-图形验证码-滑动验证码