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相关推荐

  1. PAT甲级1131 Subway Map (30分):[C++题解]堆优化dijkstra、单源最短路、地铁地图、巧妙地建图套dijkstra模板!!

    文章目录 题目分析 题目链接 题目分析 原题: 来源:acwing 分析: 建图:所有能走到的点之间建立一条边,比如下面一条地铁线路有4站,它们是相通的,两两之间建一条边,边权是经过的站点数. 下面考 ...

  2. PAT 1131. Subway Map (30) DFS

    1131. Subway Map (30) 时间限制 400 ms 内存限制 65536 kB 代码长度限制 16000 B 判题程序 Standard 作者 CHEN, Yue In the big ...

  3. PAT甲级1111 Online Map (30分):[C++题解]两次dijkstra求单源最短路、保存路径、长度最短、时间最短

    文章目录 题目分析 题目链接 题目分析 来源:acwing 分析:dijkstra求单源最短路的题目. 只是写两遍而已,第一遍求按照路径长度求,第二遍按照时间最少求. 另外加一个vector路径的判断 ...

  4. 1131. Subway Map (30)-PAT甲级真题 (DFS or 堆优化dij or SPFA)

    题意 给出地铁线路数n,分别给出每条线的站点数m,再依次列出站点id.然后询问k次从启点sv到终点ev的最短路径,如果最短路径相同,要求换乘最少的路径.最后按条件输出. 思路 1.用unordered ...

  5. 【PAT甲级】1131 Subway Map

    ✍个人博客:https://blog.csdn.net/Newin2020?spm=1011.2415.3001.5343

  6. 1131 Subway Map (30分)/最短路径问题

    题目描述 In the big cities, the subway systems always look so complex to the visitors. To give you some ...

  7. 1131 Subway Map (30 分)

    做不出来,一开始打算和Online map一样,用邻接表的dij做,但是发现这个交叉站点不好表示(用了二维数组存但不理想,超时超限). 没想到10e5竟然能用dfs做. 本题细节: 1.关于两站位于的 ...

  8. PAT甲级1016 (map,排序)

    题目 A long-distance telephone company charges its customers by the following rules: Making a long-dis ...

  9. 1131 Subway Map

    题目 题意: 找出一条路线,使得对任何给定的起点和终点,可以找出中途经停站最少的路线:如果经停站一样多,则取需要换乘线路次数最少的路线 tip:DFS + map 分析:0.可以这样计算出一条线路的换 ...

最新文章

  1. Learn OpenGL (二):三角形
  2. java List接口
  3. Visual Studio 配色方案
  4. 27岁博士毕业,32岁成清华博导!黄高助理教授:DenseNet发明者
  5. SQL Server审核最佳做法
  6. Spring Security xsd 异常
  7. matlab2c使用c++实现matlab函数系列教程-asin函数
  8. 计算机工作组如何添加打印机,局域网添加打印机,详细教您局域网打印机怎么添加...
  9. 快速低成本的组建Symbian团队(使用pys60)
  10. close 和 shutdown 的差别
  11. H-Chat:用户私聊群聊管理
  12. STM32F4系列单片机选型详解
  13. tokenpocket内网页获取用户钱包信息
  14. input type=“radio“默认按钮选中状态
  15. Mac Tomcat安装 localhost 拒绝了我们的连接请求
  16. RHCS基本理論(台湾人写的不错的文章)
  17. Records of Reinfocement Learning Experiments
  18. agv ti 毫米波雷达_一种基于毫米波雷达的AGV小车的制作方法
  19. 直流电机(BLDC)转速和频率的计算关系
  20. windows10 安装msdatlst.ocx控件

热门文章

  1. Suspicious URL pattern: [/druid/**] ,进入不了druid的后台
  2. C语言英文背单词软件,C语言背单词程序
  3. PostCSS received undefined instead of CSS string
  4. 评价指标(metrics)
  5. Java二叉树和红黑树
  6. 常垒·会客厅:医保局时代下的医院智能数据大变革
  7. greendao 默认数据库db 生成路径,以及db文件导出
  8. 程序员的半衰期只有15年
  9. 译书《物联网实战指南》出版 | 新成就:翻译自己的英文简介
  10. 【5分钟教你】3种实现验证码功能-数字短信验证码-图形验证码-滑动验证码