rt,最后四个点TLE
#include<bits/stdc++.h>
#define int long long
using namespace std;
const int N = 1005;
int n, m, g[N][N], dis[N], minn, k, ans, x, y;
bool vis[N], flag;
int pre[N];
int min(int a, int b) {
return a < b ? a : b;
}
void dijkstra()
{
memset(dis, 0x3f, sizeof(dis));
memset(vis, false, sizeof(vis));
dis[1] = 0;
for (int i = 1; i < n; i++)
{
minn = dis[0];
for (int j = 1; j <= n; j++)
{
if (!vis[j] && dis[j] < minn)
{
minn = dis[j];
k = j;
}
}
vis[k] = true;
for (int j = 1; j <= n; j++)
{
if (flag && ((k == x && j == y) || (k == y && j == x)))
continue;
if (!vis[j] && dis[k] + g[k][j] < dis[j])
{
dis[j] = dis[k] + g[k][j];
if (!flag)
pre[j] = k;
}
}
}
ans = max(ans, dis[n]);
}
signed main()
{
memset(g, 0x3f, sizeof(g));
cin >> n >> m;
for (int i = 1; i <= m; i++)
{
int a, b, v;
cin >> a >> b >> v;
g[a][b] = g[b][a] = min(g[a][b], v);
}
dijkstra();
flag = true;
for (int i = n; i; i = pre[i])
{
x = i;
y = pre[i];
dijkstra();
}
cout << ans << endl;
return 0;
}