编辑代码

const rl = require("readline").createInterface({ input: process.stdin });
var iter = rl[Symbol.asyncIterator]();
const readline = async () => (await iter.next()).value;

void (async function () {
  const N = Number(await readline());
  const M = Number(await readline());
  // const arr = (await readline()).split(" ");
  const group = {};
  // const matrix = [];
  for (let i = 0; i < M; i++) {
    // matrix.push((await readline()).split(" ").map(Number));
    // [出发点,临界点,到临界点所用时间]
    const [i, j, t] = (await readline()).split(" ").map(Number);
    if (!group[i]) group[i] = [[j, t]];
    else group[i].push([j, t]);
  }
  const virus = Number(await readline());
  // visit:记录节点i是否找到最短路径
  const visited = new Array(N + 1).fill(false);
  // dist: 记录到节点i的最短路径长度
  const dist = new Array(N + 1).fill(Infinity);
  dist[virus] = 0;
  const queue = [];
  queue.push([virus, dist[virus]]);
  // 开始bfs算法:
  while (queue.length) {
    const u = queue.pop()[0];
    if (visited[u]) continue;
    visited[u] = true;
    // 如果group[u]中有能够到达的其他节点
    if (group[u]) {
      group[u].forEach(([v, w]) => {
        const newDist = dist[u] + w;
        if (newDist < dist[v]) {
          dist[v] = newDist;
          queue.push([v, newDist]);
        }
        queue.sort((a, b) => b[1] - a[1]);
      });
    }
  }
  let ans = 0;
  for (let i = 1; i <= N; i++) {
    ans = Math.max(ans, dist[i]);
  }
  console.log(ans == Infinity ? -1 : ans);
})();