次短路 80pts 求调
查看原帖
次短路 80pts 求调
1039923
_Accepted_100楼主2024/11/22 21:57
#include <bits/stdc++.h>
using namespace std;

const int INF = 0x3f3f3f3f;
const int N = 5010;

vector < pair <int, int> > g[N];

int n, m;
int a[N][N];
int dis[N][2];
bool vis[N];

void dijkstra () {
	for (int i = 1; i <= n; i++) dis[i][0] = dis[i][1] = INF;
	dis[n][0] = 0;
	for (int i = 1; i <= n; i++) {
		int minn = INF, minj;
		for (int j = 1; j <= n; j++)
			if (!vis[j] and dis[j][0] < minn) {
				minn = dis[j][0];
				minj = j;
			}
		vis[minj] = 1;
		for (int j = 0; j < g[minj].size(); j++) {
			int v = g[minj][j].first;
			int c = g[minj][j].second;
			if (dis[v][0] > dis[minj][0] + c) {
				dis[v][1] = dis[v][0];
				dis[v][0] = dis[minj][0] + c;
				if (dis[v][1] > dis[minj][1] + c)
					dis[v][1] = dis[minj][1] + c;
			} else if (dis[v][1] > dis[minj][0] + c)
				dis[v][1] = dis[minj][0] + c;
		}
			
	}
}

int main () {
	cin >> n >> m;
	for (int i = 1; i <= m; i++) {
		int u, v, c;
		cin >> u >> v >> c;
		g[u].push_back (make_pair (v, c));
		g[v].push_back (make_pair (u, c));
	}
	dijkstra ();
	if (dis[1][1] == INF) cout << -1;
	else cout << dis[1][1];
	return 0;
}
2024/11/22 21:57
加载中...