(蒻刚学最短路,代码几乎与模版P3371代码一样) (至于红名,我也不知道为什么)
#include <bits/stdc++.h>
using namespace std;
int n, m, s, t;
const int MAXN = 20000, MAXM = 30000, MAX = 2147483647;
class EDGE
{
public:
int next, to, w;
} edge[MAXM];
int head[MAXN], cnt;
void u_v (int u, int v, int W)
{
cnt++;
edge[cnt].next = head[u];
edge[cnt].to = v;
edge[cnt].w = W;
head[u] = cnt;
}
bool vis[MAXN];
int main()
{
cin >> n >> m >> s >> t;
int ans[n + 1];
for (int i = 1; i <= n; i++)
ans[i] = MAX;
int u, v, wei;
for (int i = 0; i < m; i++)
{
scanf("%d%d%d", &u, &v, &wei);
u_v(u, v, wei);
u_v(v, u, wei);
}
int cu = s;
ans[s] = 0;
while (!vis[cu])
{
vis[cu] = 1;
for (int i = head[cu]; i != 0; i = edge[i].next)
if (ans[edge[i].to] > max(ans[cu], edge[i].w) && !vis[edge[i].to])
ans[edge[i].to] = max(ans[cu], edge[i].w);
int min = MAX;
for (int i = 1; i <= m; i++)
if (!vis[i] && ans[i] < min)
min = ans[i], cu = i;
}
cout << ans[t] << endl;
}