제출 #770021

#제출 시각아이디문제언어결과실행 시간메모리
770021vjudge1Paths (RMI21_paths)C++17
12 / 100
97 ms19164 KiB
#include <bits/stdc++.h> using namespace std; #ifdef LOCAL #include "C:\GCC\debug.h" #else #define debug(...) void(42) #endif int main() { ios::sync_with_stdio(false); cin.tie(0); int n, k; cin >> n >> k; vector<vector<array<long long, 2>>> adj(n); for (int i = 0; i < n - 1; i++) { int u, v, c; cin >> u >> v >> c; --u, --v; adj[u].push_back({v, c}); adj[v].push_back({u, c}); } vector<vector<long long>> d(n, vector<long long> (2)); vector<long long> res(n); function<void(int, int)> Dfs = [&](int u, int prev) { for (auto v : adj[u]) { if (v[0] == prev) { continue; } Dfs(v[0], u); if (d[v[0]][0] + v[1] > d[u][0]) { d[u][1] = d[u][0]; d[u][0] = d[v[0]][0] + v[1]; } else if (d[v[0]][0] + v[1] > d[u][1]) { d[u][1] = d[v[0]][0] + v[1]; } } }; Dfs(0, -1); function<void(int, int, long long)> Dfs2 = [&](int u, int prev, long long c) { res[u] = max(c, d[u][0]); for (auto v : adj[u]) { if (v[0] == prev) { continue; } if (d[v[0]][0] + v[1] == d[u][0]) { Dfs2(v[0], u, max(c, d[u][1]) + v[1]); } else { Dfs2(v[0], u, res[u] + v[1]); } } }; Dfs2(0, -1, 0); for (int root = 0; root < n; root++) { cout << res[root] << '\n'; } return 0; }
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...