Til the Cows Come Home(最短路-Dijkstra)

judge:https://vjudge.net/contest/297882#problem/A
Time limit:1000 ms
Memory limit:65536 kB
OS:Linux

描述

Bessie is out in the field and wants to get back to the barn to get as much sleep as possible before Farmer John wakes her for the morning milking. Bessie needs her beauty sleep, so she wants to get back as quickly as possible.

Farmer John’s field has N (2 <= N <= 1000) landmarks in it, uniquely numbered 1…N. Landmark 1 is the barn; the apple tree grove in which Bessie stands all day is landmark N. Cows travel in the field using T (1 <= T <= 2000) bidirectional cow-trails of various lengths between the landmarks. Bessie is not confident of her navigation ability, so she always stays on a trail from its start to its end once she starts it.

Given the trails between the landmarks, determine the minimum distance Bessie must walk to get back to the barn. It is guaranteed that some such route exists.

Input

  • Line 1: Two integers: T and N

  • Lines 2…T+1: Each line describes a trail as three space-separated integers. The first two integers are the landmarks between which the trail travels. The third integer is the length of the trail, range 1…100.

Output

  • Line 1: A single integer, the minimum distance that Bessie must travel to get from landmark N to landmark 1.

题意

贝西在田里,想在农夫约翰叫醒她早上挤奶之前回到谷仓尽可能多地睡一觉。贝西需要她的美梦,所以她想尽快回来。

农场主约翰的田里有n(2<=n<=1000)个地标,唯一编号为1…n。地标1是谷仓;贝西整天站在其中的苹果树小树林是地标n。奶牛在田里行走时使用地标间不同长度的T(1<=t<=2000)双向牛道。贝西对自己的导航能力没有信心,所以一旦开始,她总是沿着一条从开始到结束的路线行进。

根据地标之间的轨迹,确定贝西返回谷仓必须走的最小距离。这样的路线一定存在。

输入

*第1行:两个整数:t和n

*第2.t+1行:每行将一条轨迹描述为三个空格分隔的整数。前两个整数是两条轨迹之间的标志。第三个整数是跟踪的长度,范围为1…100。

输出

*第1行:一个整数,贝西从地标N到地标1的最小距离。

Sample Input

5 5
1 2 20
2 3 30
3 4 20
4 5 20
1 5 100

Sample Output

90

Hint

INPUT DETAILS:

There are five landmarks.

OUTPUT DETAILS:

Bessie can get home by following trails 4, 3, 2, and 1.

思路

简单最短路,Dijkstra走一波(闲着没事顺便写了个优先级队列优化版,把时间复杂度从O(n2)降到O(n*log(n)),同时用邻接链表代替邻接矩阵降低空间复杂度)

代码一般版

#include <iostream>
#include <algorithm>
#include <cstdio>
#include <queue>
#include <vector>
#include <cstring>
#define inf 0x3f3f3f3f
#define maxn 2005
#define _for(i, a) for(int i = 0; i < (a); i++)
#define _rep(i, a, b) for(int i = (a); i <= (b); i++)
using namespace std;
int N, M;
int S, T;
int dis[maxn];
int mp[maxn][maxn];
bool vis[maxn];
void Dijkstra() {dis[S] = 0;_for(i, M) {int k = 0, tem = inf;_rep(j, 1, M) {if (!vis[j] && dis[j] < tem) {k = j;tem = dis[j];}}vis[k] = 1;if (tem == inf) break;_rep(j, 1, M) {if (!vis[j] && dis[j] > dis[k] + mp[k][j])dis[j] = dis[k] + mp[k][j];}}
}
int main() {//freopen("in.txt", "r", stdin);while (~scanf("%d%d", &N, &M)) {//初始化_rep(i, 1, M) {dis[i] = inf;mp[i][i] = 0;_rep(j, 1, i - 1)mp[j][i] = mp[i][j] = inf;}memset(vis, 0, sizeof(vis));S = 1, T = M;_rep(i, 1, M) mp[i][i] = 0;_for(i, N) {int A, B, X;scanf("%d%d%d", &A, &B, &X);if (mp[A][B] > X)mp[A][B] = mp[B][A] = X;}Dijkstra();printf("%d\n", dis[T]);}return 0;
}

代码优化版

#include <iostream>
#include <algorithm>
#include <cstdio>
#include <queue>
#include <vector>
#include <cstring>
#define inf 0x3f3f3f3f
#define maxn 2005
#define _for(i, a) for(int i = 0; i < (a); i++)
#define _rep(i, a, b) for(int i = (a); i <= (b); i++)
using namespace std;
struct poi {int x, w;poi() {}poi(int a, int b) :x(a), w(b) {}bool operator < (const poi tem) const {return tem.w < w;}
};
int N, M;
int S, T;
int dis[maxn];
vector<poi> mp[maxn];
bool vis[maxn];
void Dijkstra() {dis[S] = 0;_for(i, M) {int k = 0, tem = inf;priority_queue<poi> que;que.push(poi(S, 0));vis[S] = 1;while (que.size()) {poi tem = que.top();que.pop();vis[tem.x] = 0;_for(i, mp[tem.x].size()) {int c = mp[tem.x][i].x;if (dis[c] > dis[tem.x] + mp[tem.x][i].w) {dis[c] = dis[tem.x] + mp[tem.x][i].w;if (!vis[c]) {que.push(poi(c, dis[c]));vis[c] = 1;}}}}}
}
int main() {//freopen("in.txt", "r", stdin);while (~scanf("%d%d", &N, &M)) {///初始化_rep(i, 1, M) {dis[i] = inf;}memset(vis, 0, sizeof(vis));//S = 1, T = M;_for(i, N) {int A, B, X;scanf("%d%d%d", &A, &B, &X);mp[A].push_back(poi(B, X));mp[B].push_back(poi(A, X));}Dijkstra();printf("%d\n", dis[T]);}return 0;
}

Til the Cows Come Home(最短路-Dijkstra)相关推荐

  1. Til the Cows Come Home(dijkstra)

    题目连接: Til the Cows Come Home 题目: Bessie is out in the field and wants to get back to the barn to get ...

  2. Til the Cows Come Home(简单的最短路)

    Til the Cows Come Home Bessie 在外地,想要在 Farmer John 叫醒她早上挤奶之前回到谷仓尽可能多地睡觉.Bessie 需要她的美容觉,所以她想尽快回来. Farm ...

  3. A - Til the Cows Come Home POJ - 2387

    A - Til the Cows Come Home POJ - 2387 最短路 #include<iostream> #include<cstdio> #include&l ...

  4. 图论刷水题记录(一)(最短路-----dijkstra算法)

    最近实在不知道干些什么,感觉自己除了水题什么都不会做,算了去刷一刷图论的水题吧本来想合起来一起发,想了想太长的话以后看起来也不方便,题目所以今天晚上就先发了dij部分,由上到下由易变难. 1.POJ ...

  5. POJ 2387 Til the Cows Come Home (最短路径 模版题 三种解法)

    原题链接:Til the Cows Come Home 题目大意:有  个点,给出从  点到  点的距离并且  和  是互相可以抵达的,问从  到  的最短距离. 题目分析:这是一道典型的最短路径模版 ...

  6. Poj 2387 Til the Cows Come Home 迪杰斯特拉(普通+优化)

    Til the Cows Come Home 迪杰斯特拉(普通+优化) 贝西在田里,想在农夫约翰叫醒她早上挤奶之前回到谷仓尽可能多地睡一觉.贝西需要她的美梦,所以她想尽快回来. 农场主约翰的田里有n( ...

  7. 图论-最短路Dijkstra算法详解超详 有图解

    整体来看dij就是从起点开始扩散致整个图的过程,为什么说他稳定呢,是因为他每次迭代,都能得到至少一个结点的最短路.(不像SPFA,玄学复杂度) 但是他的缺点就是不能处理带负权值的边,和代码量稍稍复杂. ...

  8. 单源最短路 Dijkstra算法 和 SPFA算法

    单源最短路 •从一个点出发,到达其他顶点的最短路径的长度. •基本操作:松弛 •d[u]+map[u, v]< d[v]这样的边(u,v)称为紧的(tense),可以对它进行松弛(relax): ...

  9. 最短路 dijkstra模板

    最短路 dijkstra模板 #pragma warning(disable:4996) #include<iostream> #include<string> #includ ...

最新文章

  1. Vim使用技巧及基本命令分类
  2. 懂了!VMware/KVM/Docker原来是这么回事儿
  3. 困难样本挖掘(Online Hard Sample Mining)
  4. Hadoop基本流程与应用开发
  5. [每日一题] 11gOCP 1z0-052 :2013-09-1 RMAN-- repair failure........................................A20...
  6. LeetCode MySQL 1747. 应该被禁止的Leetflex账户
  7. Microsoft Visual Studio 2008从试用版转为正式版
  8. 带你了解敏捷和DevOps的发布策略
  9. python爬取b站评论_学习笔记(1):写了个python爬取B站视频评论的程序
  10. 苹果手机型号对应表及尺寸
  11. Revit二次开发——选集
  12. Golang学习——使用Redis
  13. python中怎么压缩文件_如何使用Python实现文件压缩?
  14. HALF-GCD算法的阐述
  15. 阶段巨献 - centos+php-fpm+mariaDB+svn+nodejs+redis(开机启动及配置远程连接),配置linux的php和nodejs网站运行环境。
  16. 19-图片标签注意点
  17. 表单注册表单注册表单注册
  18. Ubuntu系统下编译C语言程序
  19. Java web 项目技术文档目录结构
  20. 图论中的聚类系数(Clustering coefficient)简单介绍

热门文章

  1. 给自己心灵一杯下午茶
  2. html网页调用后端python代码方法
  3. 关于在内网穿透时如何使用X11的问题解决
  4. web前端之JavaScript的插件下载指令及介绍、npm、install、save、require
  5. 清华第一,谁排第二?中国高校人工智能专业综合排名榜单
  6. throw new RuntimeException
  7. 新一代 PHP 框架 QeePHP 发布 - 主要特征
  8. C语言中动态分配空间的数组,可以使用sizeof求其字节数吗?
  9. C++入门第一课—“从入门到爱上”
  10. 苹果折叠手机新专利曝光,折叠屏手机1月销量同比翻了近20倍