#include <cstdio>
#include <cstring>
#include <algorithm>
using namespace std;
struct Edge {
int w, v, next;
} edge[20010];
int t, c, s, e, num = 0, vis[20010], dis[20010], queue[20010], head[20010];
void add(int u, int v, int w) {
num ++;
edge[num].v = v;
edge[num].w = w;
edge[num].next = head[u];
head[u] = num;
}
void spfa(int s) {
int h = 0, t = 1;
queue[1] = s, dis[s] = 0;
while(h < t) {
int u = queue[++ h];
vis[u] = false;
for(int i = head[u]; i; i = edge[i].next) {
int v = edge[i].v;
if(dis[v] > dis[u] + edge[i].w) {
dis[v] = dis[u] + edge[i].w;
if(! vis[v])
queue[++ t] = v;
}
}
}
}
int main() {
scanf("%d %d %d %d", &t, &c, &s, &e);
for(int i = 1; i <= c; i ++) {
int u, v, w;
scanf("%d %d %d", &u, &v, &w);
add(u, v, w); add(v, u, w);
}
memset(dis, 127, sizeof(dis));
spfa(s);
printf("%d", dis[e]);
return 0;
}
【NOIP模板】 最短路 spfa
最新推荐文章于 2018-10-30 12:09:00 发布