Shortest Path
# Include <iostream> # include <cstring> using namespace STD; const int INF = 0 xfffffff; int dis [101], vis [101], map [101] [101], V [101]; int n, m; int Dijkstra () {int I, j, SD, node; for (I = 1; I <= N; I ++) dis [I] = map [0] [I]; for (I = 0; I <n; I ++) {SD = inf; node = 0; for (j = 1; j <= N; j ++) {If (! Vis [J] & SD> dis [J]) {SD = dis [J]; node = J ;}} if (node = 0) break; vis [node] = 1; for (j = 1; j <= N; j ++) {If (! Vis [J] & map [node] [J]> 0 & dis [J]> dis [node] + map [node] [J]) dis [J] = dis [node] + map [node] [J];} return dis [1];} int main () {int I, j, l, x, t, Max, min = inf; memset (DIS, 0, sizeof (DIS); memset (VIS, INF, sizeof (VIS); memset (MAP, 0, sizeof (MAP); memset (v, 0, sizeof (v); CIN> m> N; for (I = 1; I <= N; I ++) {CIN> map [0] [I]> V [I]> X; For (j = 0; j <X; j ++) {CIN> T> L; Map [T] [I] = L ;}}for (I = 1; I <= N; I ++) {max = V [I]; for (j = 1; j <= N; j ++) {If (V [J]> max | max-V [J]> m) vis [J] = 1; else vis [J] = 0 ;} T = Dijkstra (); If (min> T) min = T;} cout <min <Endl; return 0 ;}