提交时间:2023-01-20 16:54:19
运行 ID: 67877
#include <bits/stdc++.h> using namespace std; int read() { int x = 0, w = 1; char c = 0; while (c < '0' || c > '9') { if (c == '-') w = -1; c = getchar(); } while (c >= '0' && c <= '9') { x = (x << 3) + (x << 1) + (c - '0'); c = getchar(); } return x * w; } const int N = 1e5 + 5; typedef long long ll; int n, m; int h[N], nxt[N << 1], to[N << 1]; ll val[N << 1]; int cntEdge; void AddEdge(int u, int v, ll va) { ++cntEdge; nxt[cntEdge] = h[u]; h[u] = cntEdge; to[cntEdge] = v; val[cntEdge] = va; } struct Node { int dep; ll vv; } a[N]; bool cmp(const Node& x, const Node& y) { return x.dep == y.dep ? x.vv < y.vv : x.dep < y.dep; } void dfs(int x, int fa, ll v) { a[x].dep = a[fa].dep + 1; a[x].vv = v; for (int i = h[x]; i; i = nxt[i]) { if (to[i] == fa) continue; dfs(to[i], x, v + val[i]); } } int main() { scanf("%d%d", &n, &m); if (m == n - 1) { for (int i = 1; i < n; i++) { int u, v; ll va; scanf("%d%d%lld", &u, &v, &va); AddEdge(u, v, va); AddEdge(v, u, va); } } dfs(1, 0, 0); sort(a + 1, a + n + 1, cmp); for (int i = 2; i <= n; i++) { if (a[i].dep != a[i - 1].dep) printf("%lld\n", a[i].vv); } for (int i = a[n].dep + 1; i <= n; i++) { printf("INF\n"); } return 0; }