結果
問題 |
No.3113 The farthest point
|
ユーザー |
|
提出日時 | 2025-04-19 02:42:31 |
言語 | C++17 (gcc 13.3.0 + boost 1.87.0) |
結果 |
AC
|
実行時間 | 308 ms / 2,000 ms |
コード長 | 1,009 bytes |
コンパイル時間 | 1,089 ms |
コンパイル使用メモリ | 75,280 KB |
実行使用メモリ | 18,016 KB |
最終ジャッジ日時 | 2025-04-19 02:42:40 |
合計ジャッジ時間 | 7,152 ms |
ジャッジサーバーID (参考情報) |
judge1 / judge5 |
(要ログイン)
ファイルパターン | 結果 |
---|---|
sample | AC * 3 |
other | AC * 33 |
ソースコード
#include <iostream> #include <vector> using int64 = long long; template<class T> class Edge { public: int to; T weight; Edge(int to, T weight) : to{to}, weight{weight} {} }; using Graph = std::vector<std::vector<Edge<int64>>>; int64 ans = 0; int64 dfs(int v, int par, const Graph& g) { int64 max1 = 0, max2 = 0; for (auto& e : g[v]) { if (e.to == par) continue; int64 val = dfs(e.to, v, g) + e.weight; if (val > max1) { max2 = max1; max1 = val; } else if (val > max2) { max2 = val; } } ans = std::max(ans, max1 + max2); ans = std::max(ans, max1); return std::max<int64>(0, max1); } int main() { int N; std::cin >> N; Graph g(N); int64 u, v, w; for (int i = 0; i < N - 1; i++) { std::cin >> u >> v >> w; u--; v--; g[u].emplace_back(v, w); g[v].emplace_back(u, w); } dfs(0, -1, g); std::cout << ans << std::endl; return 0; }