C.最少换乘

Time Limit: 2 Sec  Memory Limit: 128 MB Submit: 94  Solved: 25 [Submit][Status][Web Board]

Description

欧洲某城是一个著名的旅游胜地,每年都有成千上万的人前来观光旅行。Dr. Kong决定利用暑假好好游览一番。。

年轻人旅游不怕辛苦,不怕劳累,只要费用低就行。但Dr. Kong年过半百,他希望乘坐BUS从住的宾馆到想去游览的景点,期间尽可量地少换乘车。

Dr. Kon买了一张旅游地图。他发现,市政部门为了方便游客,在各个旅游景点及宾馆,饭店等地方都设置了一些公交站并开通了一些单程线路。每条单程线路从某个公交站出发,依次途经若干个站,最终到达终点站。

但遗憾的是,从他住的宾馆所在站出发,有的景点可以直达,有的景点不能直达,则他可能要先乘某路BUS坐上几站,再下来换乘同一站的另一路BUS, 这样须经过几次换乘后才能到达要去的景点。

为了方便,假设对该城的所有公交站用1,2,……,N编号。Dr. Kong所在位置的编号为1,他将要去的景点编号为N。

请你帮助Dr. Kong寻找一个最优乘车方案,从住处到景点,中间换车的次数最少。

Input

第一行:     K              表示有多少组测试数据。(2≤k≤8)

接下来对每组测试数据:

第1行:       M  N        表示有M条单程公交线路,共有N站。(1<=M<=100 1<N<=500)

第2~M+1行: 每行描述一路公交线路信息,从左至右按运行顺序依次给出了该线路上的所有站号,相邻两个站号之间用一个空格隔开。

Output

对于每组测试数据,输出一行,如果无法乘坐任何线路从住处到达景点,则输出"N0",否则输出最少换车次数,输出0表示不需换车可以直达。

Sample Input

  1. 2
  2. 3 7
  3. 6 7
  4. 4 7 3 6
  5. 2 1 3 5
  6. 2 6
  7. 1 3 5
  8. 2 6 4 3

Sample Output

  1. 2
  2. NO

HINT

 

Source

第八届河南省赛

题解:坐公交的最小换乘问题;

建图很巧妙,好像gets后面没自动加'\0',没把s初始化,就wa了好多次;

代码:

  1. #include<iostream>
  2. #include<cstring>
  3. #include<cstdio>
  4. #include<cmath>
  5. #include<algorithm>
  6. #include<set>
  7. using namespace std;
  8. #define mem(x,y) memset(x,y,sizeof(x))
  9. #define SI(x) scanf("%d",&x)
  10. #define SL(x) scanf("%lld",&x)
  11. #define PI(x) printf("%d",x)
  12. #define PL(x) printf("%lld",x)
  13. #define P_ printf(" ")
  14. const int INF=0x3f3f3f3f;
  15. const double PI=acos(-1.0);
  16. typedef long long LL;
  17. const int MAXN=1010;
  18. char s[MAXN];
  19. int m[MAXN];
  20. int mp[550][550];
  21. int dis[550],vis[550];
  22. int M;
  23. void dijkscra(int u){
  24. mem(dis,INF);mem(vis,0);
  25. dis[u]=0;
  26. while(true){
  27. int temp=INF,k;
  28. for(int i=1;i<=M;i++)
  29. if(!vis[i]&&temp>dis[i])temp=dis[k=i];
  30. if(temp==INF)break;
  31. vis[k]=1;
  32. for(int i=1;i<=M;i++)
  33. dis[i]=min(dis[i],dis[k]+mp[k][i]);
  34.  
  35. }
  36. }
  37. int main(){
  38. int T,N;
  39. SI(T);
  40. while(T--){
  41. SI(N);SI(M);
  42. getchar();
  43. mem(mp,INF);
  44. while(N--){
  45. mem(s,0);//这个没清空就错了。。。。以后注意
  46. gets(s);
  47. int k=0;
  48. mem(m,0);
  49. int tt=0;
  50. for(int i=0;s[i];i++){
  51. while(isdigit(s[i]))
  52. m[k]=m[k]*10+s[i++]-'0';
  53. k++;
  54. }
  55. //for(int i=0;i<k;i++)printf("%d ",m[i]);puts("");
  56. for(int i=0;i<k;i++)
  57. for(int j=i+1;j<k;j++)
  58. mp[m[i]][m[j]]=1;
  59. }
  60. dijkscra(1);
  61. if(dis[M]==INF)puts("NO");
  62. else printf("%d\n",dis[M]-1);
  63. }
  64. return 0;
  65. }

  

第八届河南省赛C.最少换乘(最短路建图)的更多相关文章

  1. 第八届河南省赛F.Distribution(水题)

    10411: F.Distribution Time Limit: 1 Sec  Memory Limit: 128 MB Submit: 11  Solved: 8 [Submit][Status] ...

  2. 第八届河南省赛G.Interference Signal(dp)

    G.Interference Signal Time Limit: 2 Sec  Memory Limit: 128 MB Submit: 35  Solved: 17 [Submit][Status ...

  3. 第八届河南省赛D.引水工程(kruthcra+prime)

    D.引水工程 Time Limit: 2 Sec  Memory Limit: 128 MB Submit: 118  Solved: 41 [Submit][Status][Web Board] D ...

  4. 第八届河南省赛B.最大岛屿(dfs)

    B.最大岛屿 Time Limit: 1 Sec  Memory Limit: 128 MB Submit: 30  Solved: 18 [Submit][Status][Web Board] De ...

  5. POJ-2421Constructing Roads,又是最小生成树,和第八届河南省赛的引水工程惊人的相似,并查集与最小生成树的灵活与能用,水过~~~

    Constructing Roads Time Limit: 2000MS   Memory Limit: 65536K               Description There are N v ...

  6. hdu 5294 Tricks Device 最短路建图+最小割

    链接:http://acm.hdu.edu.cn/showproblem.php?pid=5294 Tricks Device Time Limit: 2000/1000 MS (Java/Other ...

  7. HDU 5521 [图论][最短路][建图灵感]

    /* 思前想后 还是决定坚持写博客吧... 题意: n个点,m个集合.每个集合里边的点是联通的且任意两点之间有一条dis[i]的边(每个集合一个dis[i]) 求同时从第1个点和第n个点出发的两个人相 ...

  8. hdu4725 The Shortest Path in Nya Graph【最短路+建图】

    转载请注明出处,谢谢:http://www.cnblogs.com/KirisameMarisa/p/4297574.html      ---by 墨染之樱花 题目链接:http://acm.hdu ...

  9. Codeforces 938D. Buy a Ticket (最短路+建图)

    <题目链接> 题目大意: 有n座城市,每一个城市都有一个听演唱会的价格,这n座城市由m条无向边连接,每天变都有其对应的边权.现在要求出每个城市的人,看一场演唱会的最小价值(总共花费的价值= ...

随机推荐

  1. Jdbc初体验

    Java数据库连接(JDBC)由一组用 Java 编程语言编写的类和接口组成.JDBC 为工具/数据库开发人员提供了一个标准的 API,使他们能够用纯Java API 来编写数据库应用程序.然而各个开 ...

  2. 程序员眼里IE浏览器是什么样的

    主流浏览器之争从上个世纪开就开始,已经持续了很长的时间.就在几年前,IE还是最主流的web浏览器.但现在形势完全不同了,人们都在笑话IE,纷纷转向其它浏览器.今天,我向大家分享一下针对IE的搞笑图片, ...

  3. 3D模型选中显示样式改变

    osg::ref_ptr<osg::Material> material = new osg::Material(); //模型材质信息 material->setTranspare ...

  4. JAVA之Exchanger

    如果两个线程在运行过程中需要交换彼此的信息,比如一个数据或者使用的空间,就需要用到Exchanger这个类,Exchanger为线程交换信息提供了非常方便的途径,它可以作为两个线程交换对象的同步点,只 ...

  5. Office 2010 Toolkit and EZ-Activator

    “Office 2010 Toolkit 2.0.1”是“迷你KMS”的更新换代版本.虽然是单一可执行程序,但一身承担两大职能:“KMS服务器”和“客户激活端”.“Office 2010 Toolki ...

  6. 在非gui线程使用QMessageBox

    最近我写项目的时候遇到一个奇怪的需求,要在工作线程内,根据某个情况弹出一个MessageBox 但是Qt提供的MessageBox只可以在gui线程(主线程)使用,于是我就对QMessageBox封装 ...

  7. New Relic——手机应用app开发达人的福利立即就到啦!

    HiWork集成的第三方服务(机器人)将有新的添加啦,添加了BitBucket和New Relic.分别做下介绍啦! 1.BitBucket BitBucket 是一家源码托管站点.採用Mercuri ...

  8. JQuery让input从disabled变成enabled

    JQuery让input从disabled变成enabled document.getElementByIdx_x("removeButton").disabled = false ...

  9. SSIS: 把存储在数据库中的图片导出来

    Data Flow Task Step 1 获取二进制图片数据 )='C:\labs\Images\' SELECT ThumbNailPhoto,@path+ThumbnailPhotoFileNa ...

  10. 深入理解java虚拟机系列二——垃圾收集算法

    在主流的商用程序语言中大多都是用根搜索算法(GC Roots Tracing)判断对象是否存活,比如java,c#等.当从GC Roots到某个对象不可达,则证明此对象是不可用的,将要被回收. 商业虚 ...