1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60
| #include<cstdio> #include<algorithm> using namespace std;
const int MAX_C = 2501; const int MAX_T = 6201; const int INF = 1e9;
int C, T, Ts, Te; int cost[MAX_T][MAX_T]; int dis[MAX_T]; int vis[MAX_T];
void init() { scanf("%d%d%d%d", &T, &C, &Ts, &Te); for(int i = 1; i <= T; ++i) { for(int j = 1; j <= T; ++j) { cost[i][j] = INF; } dis[i] = INF; vis[i] = false; }
for(int i = 1; i <= C; ++i) { int a, b, c; scanf("%d%d%d", &a, &b, &c); cost[a][b] = cost[b][a] = c; }
for(int i = 1; i <= T; ++i) dis[i] = cost[Ts][i]; dis[Ts] = 0; vis[Ts] = 1; }
void Dijistra() { for(int i = 1; i <= T; ++i) { int x, m = INF; for(int y = 1; y <= T; ++y) if(!vis[y] && dis[y] <= m) m = dis[x = y]; vis[x] = 1; for(int y = 1; y <= T; ++y) dis[y] = min(dis[y], dis[x] + cost[x][y]); } }
int main() { init(); Dijistra(); printf("%d\n", dis[Te]); return 0; }
|