public static void Main(string[] args) { int n = ri; int k = ri; Dijkstra dk = new Dijkstra(n); for (int i = 0; i < k; i++) { int command = ri; if (command == 1) { int from = ri - 1; int to = ri - 1; long cost = rl; dk.AddPath(from, to, cost); dk.AddPath(to, from, cost); } else { int from = ri - 1; int to = ri - 1; dk.Solve(from); long ans = dk.Costs[to]; if (ans == long.MaxValue) { ans = -1; } Console.WriteLine(ans); } } }
public void NoPath() { var dk = new Dijkstra(); dk.AddPath(0, 1, 1); dk.AddPath(2, 3, 1); dk.AddPath(3, 4, 1); dk.AddPath(4, 5, 1); Assert.AreEqual(Int32.MaxValue, dk.GetMinCost(0)[5]); }
public void EdgeCase() { var dk = new Dijkstra(); dk.AddPath(0, 1, 1); dk.AddPath(1, 2, 1); dk.AddPath(2, 3, 1); dk.AddPath(3, 4, 1); Assert.AreEqual(4, dk.GetMinCost(0)[4]); dk = new Dijkstra(); dk.AddPath(0, 1, 1); Assert.AreEqual(1, dk.GetMinCost(0)[1]); }
void Solve() { io.i(out N, out M, out T); io.ini(out A, N); io.ini(out a, out b, out c, M); var dij = new Dijkstra(N, false); dij.AddPath(a, b, c.ToLong().ToArray()); dij.Run(1); var dijR = new Dijkstra(N, false); dijR.AddPath(b, a, c.ToLong().ToArray()); dijR.Run(1); var ans = 0L; N.Rep(i => { var I = i + 1; var cost = dij.MinCost(I) + dijR.MinCost(I); if (cost < T) { var stay = T - cost; var score = A[i] * stay; if (ans < score) { ans = score; } } }); ans.Prt(); }
public static void Main(string[] args) { // dijkstra?r_1,r_2,...,r_n???????????????????????????next_permutation????????????? // ??????? var nmr = Console.ReadLine().SplittedStringToInt32List(); var n = nmr[0]; var m = nmr[1]; var r = nmr[2]; var dijk = new Dijkstra(n, true); var rn = Console.ReadLine().SplittedStringToInt32List(); for (int i = 0; i < m; i++) { var abc = Console.ReadLine().SplittedStringToInt32List(); var a = abc[0] - 1; var b = abc[1] - 1; var c = abc[2]; dijk.AddPath(a, b, c); dijk.AddPath(b, a, c);; } var mincosts = new int[r][]; for (int i = 0; i < r; i++) { mincosts[i] = dijk.GetMinCost(rn[i] - 1); } var permuse = Perm(Enumerable.Range(0, r)); var mincost = INF; foreach (var item in permuse) { var ls = item.ToArray(); var cost = 0; for (int i = 0; i < r - 1; i++) { cost += mincosts[ls[i]][rn[ls[i + 1]] - 1]; } mincost = Math.Min(mincost, cost); } Console.WriteLine(mincost); Console.ReadLine(); }
public void Ordinal() { var dk = new Dijkstra(); dk.AddPath(0, 1, 3); dk.AddPath(0, 2, 1); dk.AddPath(1, 2, 2); dk.AddPath(1, 3, 1); dk.AddPath(1, 4, 2); dk.AddPath(2, 1, 1); dk.AddPath(2, 4, 4); dk.AddPath(3, 2, 2); dk.AddPath(3, 4, 4); Assert.AreEqual(4, dk.GetMinCost(0)[4]); }