std::queue<int> q; auto next = std::vector<std::vector<int>>(N); auto val = std::vector<std::vector<int>>(N); std::array<bool, N> vis; std::array<longlong, N> dis; int n, m, start = 1;
voidinput();
voidinit();
voidspfa(){ while (!q.empty()) { int tem = q.front(); q.pop(); for (int i = 0; i < next[tem].size(); i++) { if (dis[next[tem][i]] > dis[tem] + val[tem][i]) { dis[next[tem][i]] = dis[tem] + val[tem][i]; if (!vis[next[tem][i]]) { vis[next[tem][i]] = true; q.push(next[tem][i]); } } } } for (int i = 1; i <= n; i++) std::cout << dis[i] << std::endl; }
intmain(){ input(); init(); spfa(); return0; }
voidinput(){ std::cin >> n >> m; // n 个点, m条边 for (int i = 1; i <= m; i++) { int a, b, t; // a -> b 存在一条距离为 t 的边 std::cin >> a >> b >> t; next[a].push_back(b); val[a].push_back(t); } }