描述

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

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

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

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

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

请你帮助Dr. Kong寻找一个最优乘车方案,从住处到景点,中间换车的次数最少。
 
输入
第一行: K 表示有多少组测试数据。(≤k≤) 接下来对每组测试数据: 第1行: M N 表示有M条单程公交线路,共有N站。(<=M<= <N<=) 第2~M+1行: 每行描述一路公交线路信息,从左至右按运行顺序依次给出了该线路上的所有站号,相邻两个站号之间用一个空格隔开。
输出
对于每组测试数据,输出一行,如果无法乘坐任何线路从住处到达景点,则输出"N0",否则输出最少换车次数,输出0表示不需换车可以直达。
样例输入

样例输出
NO
来源
第八届河南省程序设计大赛

题解:m行,每行先建立mp=1,然后跑dijkstra就好了

AC代码:

 #pragma comment(linker, "/STACK:1024000000,1024000000")
#include<iostream>
#include<cstdio>
#include<cstring>
#include<cmath>
#include<math.h>
#include<algorithm>
#include<queue>
#include<set>
#include<bitset>
#include<map>
#include<vector>
#include<stdlib.h>
using namespace std;
#define ll long long
#define eps 1e-10
#define MOD 1000000007
#define N 10000
#define NN 506
#define inf 1<<26
int m,n;
char s[N];
int mp[NN][NN];
int a[N];
void init(){
for(int i=;i<NN;i++){
for(int j=;j<NN;j++){
if(i==j) mp[i][j]=;
else mp[i][j]=inf;
}
}
}
int dijkstra(int beg,int ent)
{
int vis[NN];
int dis[NN];
for(int i=;i<NN;i++)
{
dis[i]=inf;
vis[i]=;
}
vis[beg]=;
dis[beg]=;
int x=n-;
while(x--)
{
for(int i=;i<=n;i++)
{
if(mp[beg][i])
{ if(dis[i]>mp[beg][i]+dis[beg])
dis[i]=mp[beg][i]+dis[beg];
}
}
int minn=inf;
for(int i=;i<=n;i++)
{
if(!vis[i] && minn>dis[i])
{
minn=dis[i];
beg=i;
}
}
vis[beg]=;
}
//for(int i=1;i<=n;i++)
// printf("--%d\n",dis[i]);
return dis[ent]==inf?-:dis[ent];
}
int main()
{
int t;
scanf("%d",&t);
while(t--){
init();
//scanf("%d%d",&m,&n);
cin>>m>>n;
getchar();
for(int i=;i<m;i++){
gets(s);
int num=;
int len=strlen(s);
for(int j=;j<len;j++){
if(s[j]!=' '){
int sum=;
while(s[j]!=' ' && j<len){
sum=sum*+(s[j]-'');
j++;
}
a[num++]=sum;
}
}
for(int j=;j<num;j++){
for(int k=j+;k<num;k++){
mp[a[j]][a[k]]=;
}
}
} int ans=dijkstra(,n);
if(ans==-){
printf("NO\n");
}else{
printf("%d\n",ans-);
}
}
return ;
}

nyoj 1238 最少换乘(dijkstra)的更多相关文章

  1. nyoj 1238 最少换乘 (河南省第八届acm程序设计大赛)

    题目1238 题目信息 执行结果 本题排行 pid=1238" style="text-decoration:none; color:rgb(55,119,188)"&g ...

  2. 最少换乘(Dijkstra)

    Description 欧洲某城是一个著名的旅游胜地,每年都有成千上万的人前来观光旅行.Dr. Kong决定利用暑假好好游览一番.. 年轻人旅游不怕辛苦,不怕劳累,只要费用低就行.但Dr. Kong年 ...

  3. zzuoj 10408: C.最少换乘【最短路dijkstra】

    10408: C.最少换乘 Time Limit: 2 Sec  Memory Limit: 128 MBSubmit: 31  Solved: 8[Submit][Status][Web Board ...

  4. 第八届河南省赛C.最少换乘(最短路建图)

    C.最少换乘 Time Limit: 2 Sec  Memory Limit: 128 MB Submit: 94  Solved: 25 [Submit][Status][Web Board] De ...

  5. nyoj 1238(BFSor最短路)

    最少换乘 时间限制:2000 ms  |  内存限制:65535 KB 难度:3   描述 欧洲某城是一个著名的旅游胜地,每年都有成千上万的人前来观光旅行.Dr. Kong决定利用暑假好好游览一番.. ...

  6. HihoCoder1643 : 最少换乘([Offer收割]编程练习赛37)(bfs)

    描述 小Ho居住的城市有N条公交车线路,其中第i条线路上有Ki个车站. 某些线路之间会有公共的车站,小Ho可以在这些车站从一条线路换乘到另一条线路. 现在给定N条公交车线路以及两个车站S和E,你能帮助 ...

  7. NYOJ 58 最少步数

    最少步数 时间限制:3000 ms  |  内存限制:65535 KB 难度:4   描述 这有一个迷宫,有0~8行和0~8列: 1,1,1,1,1,1,1,1,1 1,0,0,1,0,0,1,0,1 ...

  8. nyoj 1022 最少步数【优先队列+广搜】

    最少步数 时间限制:3000 ms  |  内存限制:65535 KB 难度:4   描述 这有一个迷宫,有0~8行和0~8列: 1,1,1,1,1,1,1,1,1 1,0,0,1,0,0,1,0,1 ...

  9. NYOJ 53 最少步数

    题      目    http://acm.nyist.edu.cn/JudgeOnline/problem.php?pid=58 思路借鉴   DFS-Deep First Search-深度优先 ...

随机推荐

  1. web api\ protobuf \formatter

    9:50:20吴X2014/11/7 9:50:20 9:55:14吴X2014/11/7 9:55:14webapi实现protobuf吴X2014/11/7 9:56:29http://www.s ...

  2. 百度地图JavaScript API V1.5初级开发工具类

    /** * 百度地图使用工具类-v1.5 * @author boonya * @date 2013-7-7 * @address Chengdu,Sichuan,China * @email boo ...

  3. SQLServer 2000 Driver for JDBC][SQLServer]传入的表格格式数据流(TDS)远程过程调用(RPC)协议流不正确解决方法

    问题:[SQLServer 2000 Driver for JDBC][SQLServer]传入的表格格式数据流(TDS)远程过程调用(RPC)协议流不正确.参数 1 (""): ...

  4. Sonar入门(一):简介

    什么是Sonar? Sonar是一个开源的代码质量管理平台.它能对代码进行如下7个维度的管理. 使用插件,它可以对20多种语言进行代码质量管理,这其中包括Java,C#,C/C++,PL/SQL等等. ...

  5. hdu 5631 Rikka with Graph(图)

    n个点最少要n-1条边才能连通,可以删除一条边,最多删除2条边,然后枚举删除的1条边或2条边,用并查集判断是否连通,时间复杂度为O(n^3) 这边犯了个错误, for(int i=0;i<N;i ...

  6. IOS MVC

    简单的理解: V对M是不能通讯的. C对M通讯:API M对C通讯:Notification,KVO C对V通讯:Outlet V对C通讯:Target-action, Delegate,Dataso ...

  7. linux 在批处理中,完整路径有空格的处理方式(加引號)

    cp -f E:/XML_EDITOR/xmleditor25/xmleditor/Editor_UIOuterCtrl/TraceViewDlg.cpp E:/XML_EDITOR/'XMLEdit ...

  8. Linux 下的 Nginx 反向代理配置.

    最近实践中遇到了需要利用 nginx 进行反向代理服务器请求的需求,以前没怎么碰触过,因此花了1个多小时,快速阅览了一下nginx官网在反向代理服务中给出的基本定义: 说实话,官网给予的定义是精准的, ...

  9. 【考虑周全+数学变形】【11月赛】Is it a fantastic matrix?

    Is it a fantastic matrix? Time Limit : 2000/1000ms (Java/Other)   Memory Limit : 65536/32768K (Java/ ...

  10. 移动平台前端开发总结(针对iphone,Android等手机)

    移动平台前端开发是指针对高端智能手机(如Iphone.Android)做站点适配也就是WebApp,并非是针对普通手机开发Wap 2.0,所以在阅读本篇文章以前,你需要对webkit内核的浏览器有一定 ...