334: #119. 单源最短路
题目描述
给一个 n(1≤n≤2500) n(1 \leq n \leq 2500)n(1≤n≤2500) 个点 m(1≤m≤6200) m(1 \leq m\leq 6200 )m(1≤m≤6200) 条边的无向图,求 s ss 到 t tt 的最短路。
输入格式
第一行四个由空格隔开的整数 n nn、m mm、s ss、t tt。
之后的 m mm 行,每行三个正整数 si s_isi、ti t_iti、wi(1≤wi≤109) w_i(1 \leq w_i \leq 10 ^ 9)wi(1≤wi≤109),表示一条从 si s_isi 到 ti t_iti 长度为 wi w_iwi 的边。
输出格式
一个整数表示从 s ss 到 t tt 的最短路长度。数据保证至少存在一条道路。
样例
样例输入
7 11 5 4
2 4 2
1 4 3
7 2 2
3 4 3
5 7 5
7 3 3
6 1 1
6 3 4
2 4 3
5 6 3
7 2 1
样例输出
7
分析:
标准的最短路径题,由于数据过大,弗洛伊德算法O(n^3)时间超时,要用迪杰斯特拉算法O(n^2)
代码:
#include <bits/stdc++.h>
using namespace std;
typedef long long ll;
ll road[2501][2501];
int main()
{
int n, m, s, t;