๐ŸŽฒ ๋ฐฑ์ค€ 1504๋ฒˆ ํŠน์ •ํ•œ ์ตœ๋‹จ ๊ฒฝ๋กœ

Jeongeunยท2024๋…„ 1์›” 1์ผ
0

๋ฐฑ์ค€

๋ชฉ๋ก ๋ณด๊ธฐ
149/187

๋ฐฑ์ค€ 1504๋ฒˆ

๐Ÿงธ ๋‹ค์Œ๋ฒˆ์— ์‘์šฉ๋ฌธ์ œ๋ฅผ ๋„์ „ํ•ด๋ณด๊ฒ ๋‹ค!

์ฝ”๋“œ

const fs = require('fs'); 
const input = fs.readFileSync('/dev/stdin').toString().trim().split('\n');
const [N, E] = input.shift().split(" ").map(Number);
const graph = Array.from(new Array(N + 1), () => []);
for (let e = 0; e < E; e++) {
  const [a, b, c] = input[e].split(" ").map(Number);
  graph[a].push([b, c]);
  graph[b].push([a, c]);
}

const [v1, v2] = input[E].split(" ").map(Number);
const result = new Array(2).fill(Infinity);

const dijkstra = (start) => {
  const distArr = new Array(N + 1).fill(Infinity);
  const queue = [[start, 0]];
  distArr[start] = 0;
  while (queue.length) {
    const [to, dist] = queue.shift();
    for (let j = 0; j < graph[to].length; j++) {
      const [nextTo, nextDist] = graph[to][j];
      if (distArr[nextTo] > dist + nextDist) {
        distArr[nextTo] = dist + nextDist;
        queue.push([nextTo, distArr[nextTo]]);
      }
    }
  }

  return distArr;
};

const arr = dijkstra(1);
result[0] = arr[v1];
result[1] = arr[v2];
const arr2 = dijkstra(v1);
result[0] += arr2[v2];
result[1] += arr2[N];
const arr3 = dijkstra(v2);
result[1] += arr3[v1];
result[0] += arr3[N];

const answer = Math.min(...result);
if (answer === Infinity) console.log(-1);
else console.log(answer);

0๊ฐœ์˜ ๋Œ“๊ธ€