周游世界 (30 分)

周游世界是件浪漫事,但规划旅行路线就不一定了…… 全世界有成千上万条航线、铁路线、大巴线,令人眼花缭乱。所以旅行社会选择部分运输公司组成联盟,每家公司提供一条线路,然后帮助客户规划由联盟内企业支持的旅行路线。本题就要求你帮旅行社实现一个自动规划路线的程序,使得对任何给定的起点和终点,可以找出最顺畅的路线。所谓“最顺畅”,首先是指中途经停站最少;如果经停站一样多,则取需要换乘线路次数最少的路线。

输入格式:

输入在第一行给出一个正整数N(≤100),即联盟公司的数量。接下来有N行,第i行(i=1,⋯,N)描述了第i家公司所提供的线路。格式为:

M S[1] S[2] ⋯ S[M]

其中M(≤100)是经停站的数量,S[i](i=1,⋯,M)是经停站的编号(由4位0-9的数字组成)。这里假设每条线路都是简单的一条可以双向运行的链路,并且输入保证是按照正确的经停顺序给出的 —— 也就是说,任意一对相邻的S[i]和S[i+1](i=1,⋯,M−1)之间都不存在其他经停站点。我们称相邻站点之间的线路为一个运营区间,每个运营区间只承包给一家公司。环线是有可能存在的,但不会不经停任何中间站点就从出发地回到出发地。当然,不同公司的线路是可能在某些站点有交叉的,这些站点就是客户的换乘点,我们假设任意换乘点涉及的不同公司的线路都不超过5条。

在描述了联盟线路之后,题目将给出一个正整数K(≤10),随后K行,每行给出一位客户的需求,即始发地的编号和目的地的编号,中间以一空格分隔。

输出格式:

处理每一位客户的需求。如果没有现成的线路可以使其到达目的地,就在一行中输出“Sorry, no line is available.”;如果目的地可达,则首先在一行中输出最顺畅路线的经停站数量(始发地和目的地不包括在内),然后按下列格式给出旅行路线:

Go by the line of company #X1 from S1 to S2.
Go by the line of company #X2 from S2 to S3.
......

其中Xi是线路承包公司的编号,Si是经停站的编号。但必须只输出始发地、换乘点和目的地,不能输出中间的经停站。题目保证满足要求的路线是唯一的。

输入样例:

4
7 1001 3212 1003 1204 1005 1306 7797
9 9988 2333 1204 2006 2005 2004 2003 2302 2001
13 3011 3812 3013 3001 1306 3003 2333 3066 3212 3008 2302 3010 3011
4 6666 8432 4011 1306
4
3011 3013
6666 2001
2004 3001
2222 6666

输出样例:

2
Go by the line of company #3 from 3011 to 3013.
10
Go by the line of company #4 from 6666 to 1306.
Go by the line of company #3 from 1306 to 2302.
Go by the line of company #2 from 2302 to 2001.
6
Go by the line of company #2 from 2004 to 1204.
Go by the line of company #1 from 1204 to 1306.
Go by the line of company #3 from 1306 to 3001.
Sorry, no line is available.

解题思路:首先能确定是最短路问题,当时是用spfa写的,但是输出路径理解错误了,只有15分。看了网上的题解可以用dfs,就重新用dfs写了一遍。只要明白题目让输出的是什么就可以了。

#include<bits/stdc++.h>
using namespace std;
#define LL long long
#define sca(x) scanf("%d",&x)
#define rep(i,j,k) for(int i=j;i<=k;i++)
#define pb(x) push_back(x)
#define N 100005
#define inf 0x3f3f3f3f
#define mp(x,y) make_pair(x,y)int n;
vector<int>V[N];
map<pair<int,int>,int>mmp;
int a[N];
int id[N];
void add(int x,int k)
{int u,v;for(int i=2;i<=k;i++){u=a[i],v=a[i-1];V[u].pb(v);V[v].pb(u);mmp[mp(u,v)]=x;mmp[mp(v,u)]=x;}
}void  input( )
{sca(n);rep(i,1,n){int k;sca(k);rep(j,1,k)sca(a[j]);add(i,k);}
}int point,flag;
int path[N],path1[N];
int vis[N];bool judge(int dep)
{int cnt1=0,cnt2=0;int now=mmp[mp(path[1],path[2])];for(int i=2;i+1<=dep;i++){if(mmp[mp(path[i],path[i+1])]!=now)cnt1++;now=mmp[mp(path[i],path[i+1])];}now=mmp[mp(path1[1],path1[2])];for(int i=2;i+1<=dep;i++){if(mmp[mp(path1[i],path1[i+1])]!=now)cnt2++;now=mmp[mp(path1[i],path1[i+1])];}return cnt2<cnt1;
}void dfs(int s,int t,int dep)
{path1[dep]=s;if(s==t){flag=1;if(dep<point){point=dep;for(int i=1;i<=dep;i++)path[i]=path1[i];}else if(dep==point){if(judge(dep)){for(int i=1;i<=dep;i++)path[i]=path1[i];}}return ;}for(int i=0;i<V[s].size();i++){int v=V[s][i];if(vis[v])continue;vis[v]=1;dfs(v,t,dep+1);vis[v]=0;}
}void solve()
{int m;sca(m);while(m--){int s,t;sca(s),sca(t);point=inf;flag=0;memset(vis,0,sizeof(vis));dfs(s,t,1);if(flag){cout<<point-1<<endl;queue<int>q;int now=mmp[mp(path[1],path[2])];int ou=1;a[ou++]=s;id[1]=now;for(int i=2;i+1<=point;i++){if(mmp[mp(path[i],path[i+1])]!=now)id[ou]=mmp[mp(path[i],path[i+1])],a[ou++]=path[i];now=mmp[mp(path[i],path[i+1])];}a[ou]=t;for(int i=1;i+1<=ou;i++){printf("Go by the line of company #%d from %04d to %04d.\n",id[i],a[i],a[i+1]);}}else puts("Sorry, no line is available.");}
}
int main()
{input();solve();
}

天梯练习赛 周游世界相关推荐

  1. 重返天梯-L3-014 周游世界 (30 分)(dfs)

    题目描述 周游世界是件浪漫事,但规划旅行路线就不一定了-- 全世界有成千上万条航线.铁路线.大巴线,令人眼花缭乱.所以旅行社会选择部分运输公司组成联盟,每家公司提供一条线路,然后帮助客户规划由联盟内企 ...

  2. 团体天梯 L3-014 周游世界 (30 分)(STL)

    L3-014 周游世界 (30 分) 周游世界是件浪漫事,但规划旅行路线就不一定了-- 全世界有成千上万条航线.铁路线.大巴线,令人眼花缭乱.所以旅行社会选择部分运输公司组成联盟,每家公司提供一条线路 ...

  3. CCCC-GPLT L3-014. 周游世界 团体程序设计天梯赛

    周游世界是件浪漫事,但规划旅行路线就不一定了-- 全世界有成千上万条航线.铁路线.大巴线,令人眼花缭乱.所以旅行社会选择部分运输公司组成联盟,每家公司提供一条线路,然后帮助客户规划由联盟内企业支持的旅 ...

  4. 团体程序设计天梯赛-练习集 -- L3-014. 周游世界(dijkstra)

    题意: 给你一些边,每个边都属于一个确定的公司,告诉你q 个询问,每个询问让你输出两点之间的最短路,并且打印解,连续属于一个公司的线路,只打印收尾. 思路: 这个题赛场上过样例后,只得到了一分.= = ...

  5. 团体程序设计天梯赛L3-014 周游世界

    L3-014. 周游世界 时间限制 200 ms 内存限制 65536 kB 代码长度限制 8000 B 判题程序 Standard 作者 陈越 周游世界是件浪漫事,但规划旅行路线就不一定了-- 全世 ...

  6. 带你「周游世界」的 MODNet 算法

    来源 | Jack Cui 责编 | 晋兆雨 头图 | CSDN下载自视觉中国 最近又有一个算法火了,不知道你们看到没?直接看效果! 效果这么稳定的人像 Image Matting 算法真的不多,并且 ...

  7. 从明天起,做一个幸福的人。喂马,砍柴,周游世界

    从明天起,做一个幸福的人.喂马,砍柴,周游世界 转载于:https://blog.51cto.com/maitianli/1355347

  8. 好想找一个灵魂伴侣,然后带着他一起周游世界,会实现吗?

    1.很遗憾,这个世界上没有所谓高度契合的灵魂伴侣. 2.人谈恋爱,特别是初恋的时候,都是灵魂伴侣,但想一辈子都是,不现实. 3.小时候看琼瑶剧,那里的男女都是灵魂伴侣,永远不愁吃穿,没有凡人的苦恼.但 ...

  9. 旅游新时尚:点点鼠标就可“周游世界”

    网上开店.网上社交.网上工作--如今,旅游也可以在网上实现了--足不出户,面对电脑,点点鼠标,既可以欣赏大好河山,也可以"周游世界". 网络旅游是什么? 从事媒体工作的孙×××,不 ...

最新文章

  1. 以前初学php用的分页函数
  2. 识别、触达、转化、评估!百度云用ABC四招颠覆营销不可能
  3. What is Gameplay
  4. python if语句多个条件-Python中if有多个条件怎么办
  5. WebRTC的优缺点
  6. php内置函数数组函数,PHP 数组排序内置函数
  7. 有效Java第三版的源代码已更新为使用较新的功能
  8. VS studio 2019 加 CUDA + CUDNN 开发环境配置
  9. LOJ6503. 「雅礼集训 2018 Day4」Magic(容斥原理+NTT)
  10. POJ3494Largest Submatrix of All 1’s[单调栈]
  11. 内网渗透系列:隐匿攻击方法
  12. 查找计算机里包含相关文字,搜索word包含文字内容
  13. Unity批量给模型上同一个材质
  14. 小米android手机同步数据,怎样将旧手机里面的数据,丝毫不差的转移到新手机?一键教你搞定...
  15. php需要做临时表嘛,php中使用临时表查询数据的一个例子
  16. 第一节:linux 开发AI算法以及libtorch部署算法详细教程-环境搭建
  17. 人家好害羞啦主题主题下载
  18. 业精于勤,荒于嬉;行成于思,毁于随
  19. ADB入门(四)-连接异常处理篇
  20. 成功KMS激活window8,win2012,office2013,visio2013,project2013

热门文章

  1. PHP LFI 利用临时文件 Getshell 姿势
  2. excel模板下载和导入功能
  3. 停止字jQuery中图片隐藏效果的的所有方法
  4. 交互设计的心得体会总结
  5. vue解决 this.refs 拿取 v-for下元素undefine问题
  6. 用Python爬了爬自己的微信朋友
  7. 联想k27装debian
  8. Python hasattr() 函数
  9. 大学生会用计算机的重要性,聊聊大学生电脑的一些事情
  10. 超棒的圆形风格卡通和漫画超级英雄设计