1649 齐头并进

题目来源: CodeForces
基准时间限制:1 秒 空间限制:131072 KB 分值: 10 难度:2级算法题

在一个叫奥斯汀的城市,有n个小镇(从1到n编号),这些小镇通过m条双向火车铁轨相连。当然某些小镇之间也有公路相连。为了保证每两个小镇之间的人可以方便的相互访问,市长就在那些没有铁轨直接相连的小镇之间建造了公路。在两个直接通过公路或者铁路相连的小镇之间移动,要花费一个小时的时间。

现在有一辆火车和一辆汽车同时从小镇1出发。他们都要前往小镇n,但是他们中途不能同时停在同一个小镇(但是可以同时停在小镇n)。火车只能走铁路,汽车只能走公路。

现在请来为火车和汽车分别设计一条线路;所有的公路或者铁路可以被多次使用。使得火车和汽车尽可能快的到达小镇n。即要求他们中最后到达小镇n的时间要最短。输出这个最短时间。(最后火车和汽车可以同时到达小镇n,也可以先后到达。)

样例解释:

在样例中,火车可以按照 1⟶3⟶4 行驶,汽车 1⟶2⟶4 按照行驶,经过2小时后他们同时到过小镇4。

Input
单组测试数据。
第一行有两个整数n 和 m (2≤n≤400, 0≤m≤n*(n-1)/2) ,表示小镇的数目和铁轨的数目。
接下来m行,每行有两个整数u 和 v,表示u和v之间有一条铁路。(1≤u,v≤n, u≠v)。
输入中保证两个小镇之间最多有一条铁路直接相连。
Output
输出一个整数,表示答案,如果没有合法的路线规划,输出-1。
Input示例
4 2
1 3
3 4
Output示例
2

C++的运行时限为:1000 ms ,空间限制为:131072 KB

题意就是两个最短路中找最大的那一个。

这个题和hdu2544有点不一样的就是此题不一定有解,所以一开始保存当前节点的应该初始化为第一个点,否则会RE,本人亲测无数次,有点毒。

太菜太智障,板子都写错了。。。一个图就可以解决这个问题,转换一下就可以。因为有火车就没有公路。直接第二次更改一下值就可以。

代码:

 //迪杰斯特拉玩一发
#include<iostream>
#include<cstring>
#include<cstdio>
#include<cmath>
#include<algorithm>
#include<stdlib.h>
using namespace std;
const int N=;
const int maxn=1e7+1e6;
const int INF=0x3f3f3f3f;
int a[N][N];
int dist[maxn];
int vis[maxn];
int n,m;
void Dijkstra(){
int tmp,v;
memset(vis,,sizeof(vis));
memset(dist,,sizeof(dist));
for(int i=;i<=n;i++)
dist[i]=a[][i];
dist[]=;
vis[]=; //就是RE在这里。
for(int i=;i<=n;i++){
tmp=INF;
v=;
for(int j=;j<=n;j++){
if(!vis[j]&&tmp>dist[j]){
tmp=dist[j];
v=j;
}
}
vis[v]=;
for(int l=;l<=n;l++){
if(!vis[l])
dist[l]=min(dist[l],dist[v]+a[v][l]);
}
}
}
int main(){
while(~scanf("%d%d",&n,&m)){
for(int i=;i<=n;i++){
for(int j=;j<=n;j++){
a[i][j]=INF;
}
}
int h,k;
for(int i=;i<m;i++){
scanf("%d%d",&h,&k);
a[h][k]=a[k][h]=;
}
Dijkstra();
int ans=dist[n];
if(ans>=INF){printf("-1\n");break;}
for(int i=;i<=n;i++){
for(int j=;j<=n;j++){
if(a[i][j]==)a[i][j]=INF;
else if(a[i][j]==INF)a[i][j]=;
}
}
Dijkstra();
ans=max(ans,dist[n]);
if(ans>=INF)printf("-1\n");
else printf("%d\n",ans);
}
return ;
}

太菜啦,要菜哭了==

加油,臭咸鱼。


51nod1649- 齐头并进-最短路的更多相关文章

  1. 51nod 1649.齐头并进-最短路(Dijkstra)

    1649 齐头并进 题目来源: CodeForces 基准时间限制:1 秒 空间限制:131072 KB 分值: 10 难度:2级算法题 在一个叫奥斯汀的城市,有n个小镇(从1到n编号),这些小镇通过 ...

  2. 51-node-1649齐头并进(最短路)

    题意:中文题,没啥坑点: 解题思路:这道题一开始以为要跑两个最短路,后来发现不用,因为如果给定了铁路的线路,那么,公路一定是n个节点无向图的补图,所以,铁路和公路之间一定有一个是可以直接从1到n的,我 ...

  3. bzoj1001--最大流转最短路

    http://www.lydsy.com/JudgeOnline/problem.php?id=1001 思路:这应该算是经典的最大流求最小割吧.不过题目中n,m<=1000,用最大流会TLE, ...

  4. 【USACO 3.2】Sweet Butter(最短路)

    题意 一个联通图里给定若干个点,求他们到某点距离之和的最小值. 题解 枚举到的某点,然后优先队列优化的dijkstra求最短路,把给定的点到其的最短路加起来,更新最小值.复杂度是\(O(NElogE) ...

  5. Sicily 1031: Campus (最短路)

    这是一道典型的最短路问题,直接用Dijkstra算法便可求解,主要是需要考虑输入的点是不是在已给出的地图中,具体看代码 #include<bits/stdc++.h> #define MA ...

  6. 最短路(Floyd)

    关于最短的先记下了 Floyd算法: 1.比较精简准确的关于Floyd思想的表达:从任意节点A到任意节点B的最短路径不外乎2种可能,1是直接从A到B,2是从A经过若干个节点X到B.所以,我们假设maz ...

  7. bzoj1266最短路+最小割

    本来写了spfa wa了 看到网上有人写Floyd过了 表示不开心 ̄へ ̄ 改成Floyd试试... 还是wa ヾ(。`Д´。)原来是建图错了(样例怎么过的) 结果T了 于是把Floyd改回spfa 还 ...

  8. HDU2433 BFS最短路

    Travel Time Limit: 10000/2000 MS (Java/Others)    Memory Limit: 32768/32768 K (Java/Others)Total Sub ...

  9. 最短路(代码来源于kuangbin和百度)

    最短路 最短路有多种算法,常见的有一下几种:Dijstra.Floyd.Bellman-Ford,其中Dijstra和Bellman-Ford还有优化:Dijstra可以用优先队列(或者堆)优化,Be ...

随机推荐

  1. JDK源码阅读(1)_简介+ java.io

    1.简介 针对这一个版块,主要做一个java8的源码阅读笔记.会对一些在javaWeb中应用比较广泛的java包进行精读,附上注释.对于容易混淆的知识点给出相应的对比分析. 精读的源码顺序主要如下: ...

  2. Win10关闭某程序的通知的方法

    一.点击右下角的通知图标. 二.点击所有通知. 三.点击系统 四.点击通知和操作 五.下拉,看到:获取来自这些发送者的通知 六.关闭自己想关闭通知的程序即可.

  3. 【NOIP模拟】cut

    Description F大爷热爱切树.今天他找到一棵黑白树,不到两秒钟,F大爷就把这棵树切掉了.已知原先树上共n个点,每个点都是黑点或者白点,F大爷切去若干条边后,分成的若干个连通子树中每块恰有一个 ...

  4. js实现文字逐个出现动效

    效果 首先看下效果,这是在h5页面中常见的一中文字展现方式,那么是怎么实现的呢?其实很简单 思路 用一个定时器将预制的文字通过.substring(0, i)方法不断的赋给要显示的区域,i在定时器里面 ...

  5. Run a task only once in (akka) cluster

    在stackOverflow网站上看到这一提问,下文是部分摘抄问题简述: Java cluster, run task only once We have a java process, which ...

  6. HTML知识点记录

    1.input的type设置为file时,设置multiple属性可以同时选择多个文件.

  7. 从0到上线开发企业级电商项目_前端_01_sublime使用技巧

    一.用户设置 { "color_scheme": "Packages/Color Scheme - Default/Monokai.tmTheme", &quo ...

  8. Centos7 安装oracle数据库

    参考的内容: http://docs.oracle.com/cd/E11882_01/install.112/e24325/toc.htm#CHDCBCJF http://www.cnblogs.co ...

  9. UTC 通用格式时间 转换为 时间戳,并格式化为2017-01-01 12:00:00

    在使用阿里云oss获取文件列表是,发现时间格式是这样的 2016-09-20T13:45:04.000Z (尼玛,是什么鬼), 经过度娘的解答,发现这就是传说中的 UTC通用格式时间 问题来了,怎么转 ...

  10. 自定义类型转换器Convert

    //自己指定一个类型转换器(将String转成Date) ConvertUtils.register(new Converter() { @Override public Object convert ...