城市路(信息学奥赛一本通 - T1381)
题目描述
罗老师被邀请参加一个舞会,是在城市 n,而罗老师当前所处的城市为 1,附近还有很多城市 2 ~ n-1,
有些城市之间没有直接相连的路,有些城市之间有直接相连的路,这些路都是双向的,当然也可能有多条。
现在给出直接相邻城市的路长度,罗老师想知道从城市 1 到城市 n,最短多少距离。
输入格式
输入 n, m,表示 n 个城市和 m 条路;
接下来 m 行,每行 a b c, 表示城市 a 与城市 b 有长度为 c 的路。
输出格式
输出 1 到 n 的最短路,如果 1 到达不了 n,就输出 -1。
输入样例
5 5
1 2 20
2 3 30
3 4 20
4 5 20
1 5 100
输出样例
90
数据范围
1 ≤ n ≤ 2000,1 ≤ m ≤ 10000,0 ≤ c ≤ 10000
题解
dijkstra(朴素版):
#include <iostream>
#include <cstring>
using namespace std;const int N = 2010;int n, m;
bool st[N];
int g[N][N], dist[N];int dijkstra()
{memset(dist, 0x3f, sizeof dist);dist[1] = 0;for (int i = 0; i < n; i ++){int t = -1;for (int j = 1; j <= n; j ++)if(!st[j] && (t == -1 || dist[j] < dist[t]))t = j;st[t] = true;for (int j = 1; j <= n; j ++)dist[j] = min(dist[j], dist[t] + g[t][j]); }if(dist[n] == 0x3f3f3f3f) return -1;return dist[n];
}int main()
{cin >> n >> m;memset(g, 0x3f, sizeof g);while(m --){int a, b, c;cin >> a >> b >> c;g[a][b] = g[b][a] = min(g[a][b], c);}if(dijkstra() == -1) cout << -1 << endl;else cout << dist[n] << endl;return 0;
}
题解二
dijkstra(堆优化)&& 链式前向星:
#include <iostream>
#include <cstring>
#include <queue>
using namespace std;const int N = 2010, M = 20010;typedef pair<int, int> PII;int n, m;
bool st[N];
int dist[N];
int h[N], w[M], e[M], ne[M], idx;void add(int a, int b, int c)
{e[idx] = b, w[idx] = c, ne[idx] = h[a], h[a] = idx ++;
}int dijkstra()
{memset(dist, 0x3f, sizeof dist);dist[1] = 0;priority_queue<PII, vector<PII>, greater<PII> > q;q.push({0, 1});while(q.size()){PII t = q.top();q.pop();int u = t.second, distance = t.first;if(st[u]) continue;st[u] = true;for (int i = h[u]; i != -1; i = ne[i]){int j = e[i];if(dist[j] > dist[u] + w[i]){dist[j] = dist[u] + w[i];q.push({dist[j], j});}}}if (dist[n] == 0x3f3f3f3f) return -1;return dist[n];
}int main()
{cin >> n >> m;memset(h, -1, sizeof h);while(m --){int a, b, c;cin >> a >> b >> c;add(a, b, c), add(b, a, c);}cout << dijkstra() << endl;return 0;
}
城市路(信息学奥赛一本通 - T1381)相关推荐
- 城市路(信息学奥赛一本通-T1381)
[题目描述] 罗老师被邀请参加一个舞会,是在城市n,而罗老师当前所处的城市为1,附近还有很多城市2~n-1,有些城市之间没有直接相连的路,有些城市之间有直接相连的路,这些路都是双向的,当然也可能有多条 ...
- 友好城市(信息学奥赛一本通-T1263)
[题目描述] Palmia国有一条横贯东西的大河,河有笔直的南北两岸,岸上各有位置各不相同的N个城市.北岸的每个城市有且仅有一个友好城市在南岸,而且不同城市的友好城市不相同. 每对友好城市都向政府申请 ...
- 信息学奥赛一本通(题解目录)
信息学奥赛一本通(题解目录) 记录了我从初学者到逐渐熟悉c++的成长之路 信息学奥赛一本通OJ 目录 信息学奥赛一本通(题解目录) 前言 一.语言及算法基础篇 基础(一) C++语言 第一章 C++语 ...
- 信息学奥赛一本通 1263:【例9.7】友好城市
[题目链接] ybt 1263:[例9.7]友好城市 [题目考点] 1. 动态规划:线性动规 2. 排序 [解题思路] 该题可以抽象为两条平行线上各有若干点,给定一些两条线上点之间的连线,在选出连线不 ...
- 信息学奥赛一本通 (C++)上机练习
信息学奥赛一本通(C++)上机练习 此书为娃儿的第一本刷题书.娃儿现在四年级 ,希望他能坚持下来.特开贴加油 luogu: disangan223 第一部分 C++语言 第一章 C++语言入门 T10 ...
- 信息学奥赛一本通(基础算法与数据结构-题解汇总目录)
信息学奥赛一本通(C++版)在线评测系统 基础(二)基础算法 更新中...... 第一章高精度计算 1307[例1.3]高精度乘法 1308[例1.5]高精除 1309[例1.6]回文数(Noip ...
- 经典问题的另类解法——以信息学奥赛一本通c++版1216红与黑为例
题目链接:信息学奥赛一本通(C++版)在线评测系统 (ssoier.cn) 题目描述: 有一间长方形的房子,地上铺了红色.黑色两种颜色的正方形瓷砖.你站在其中一块黑色的瓷砖上,只能向相邻的黑色瓷砖移动 ...
- 信息学奥赛一本通(C++版)NOIP提高组(1820-1829)
信息学奥赛一本通(C++版)NOIP提高组目录 //1820 [题目描述] 我们可以用这样的方式来表示一个十进制数:将每个阿拉伯数字乘以一个以该数字所 处位置的(值减1)为指数,以10为底数的幂之和的 ...
- 信息学奥赛一本通(C++版) 第二部分 基础算法 第九章 动态规划
总目录详见:https://blog.csdn.net/mrcrack/article/details/86501716 信息学奥赛一本通(C++版) 第二部分 基础算法 第九章 动态规划 第一节 动 ...
最新文章
- 控制C++的内存分配
- [MATLAB]从已知矩阵中取出子阵
- php中int()强制转换,php下intval()和int强制转换使用的区别是什么
- 如果女朋友突然问你DNS是个啥...
- Synergy软件的基本配置/使用(详细教程)
- css3 选择器_CSS 3
- 来一个可能防止恶意采集和爬虫的SH
- 员工薪酬管理设计方案
- dev c++ Boost库的安装
- 11988 - Broken Keyboard (a.k.a. Beiju Text)
- Exception in thread main java.lang.NoClassDefFoundError: org/slf4j/helpers/NOPLoggerFactory错误解决方...
- object.__new__
- 每日算法系列【LeetCode 16】最接近的三数之和
- 【渝粤教育】国家开放大学2018年春季 0420-22T酒店管理概论 参考试题
- 基于java web的学生考勤带请假管理系统——计算机毕业设计
- mfc入门基础(三)创建对话框
- 域名被抢注了怎么办?
- python和mysql匹配吗_python使用mysql
- Ant工具 ant的安装与配置 ant作用
- Windows环境下编译pjsip