rt,WA 70,找不出错误了/kk
#include <bits/stdc++.h>
using namespace std;
const int N = 5005;
struct Edge {
int to, val, nxt;
} e[N << 1];
int n, m;
int head[N], cnt;
int disf[N], diss[N];
bool in[N];
void Add(int u, int v, int w) {
e[++cnt].to = v;
e[cnt].val = w;
e[cnt].nxt = head[u];
head[u] = cnt;
}
void SPFA() {
memset(disf, 0x3f, sizeof disf);
memset(diss, 0x3f, sizeof diss);
queue<int> q;
disf[1] = 0;
in[1] = true;
q.push(1);
while(!q.empty()) {
int u = q.front();
q.pop();
in[u] = false;
for(int i = head[u]; i; i = e[i].nxt) {
bool push = false;
int v = e[i].to, w = e[i].val;
if(disf[v] > disf[u] + w) {
diss[v] = disf[v];
disf[v] = disf[u] + w;
push = true;
}
else if(disf[v] < disf[u] + w) {
if(diss[v] > disf[u] + w) {
diss[v] = disf[u] + w;
push = true;
}
}
if(diss[v] > diss[u] + w) {
diss[v] = diss[u] + w;
push = true;
}
if(push && !in[v]) {
q.push(v);
in[v] = true;
}
}
}
}
int main() {
cin >> n >> m;
for(int i = 1; i <= m; i++) {
int u, v, w;
scanf("%d%d%d", &u, &v, &w);
Add(u, v, w);
Add(v, u, w);
}
SPFA();
cout << diss[n] << endl;
return 0;
}