結果
問題 | No.872 All Tree Path |
ユーザー |
![]() |
提出日時 | 2019-08-30 23:10:12 |
言語 | C++11 (gcc 13.3.0) |
結果 |
AC
|
実行時間 | 309 ms / 3,000 ms |
コード長 | 922 bytes |
コンパイル時間 | 1,465 ms |
コンパイル使用メモリ | 171,224 KB |
実行使用メモリ | 34,432 KB |
最終ジャッジ日時 | 2024-11-22 02:48:28 |
合計ジャッジ時間 | 4,913 ms |
ジャッジサーバーID (参考情報) |
judge4 / judge1 |
(要ログイン)
ファイルパターン | 結果 |
---|---|
sample | AC * 2 |
other | AC * 18 |
ソースコード
#include <bits/stdc++.h>#define Int int64_tusing namespace std;void dfs(const vector<vector<pair<int, Int>>>& g, int u, vector<Int>& child) {child[u] = 1;for (auto p : g[u]) {int v = p.first;if (child[v] < 0) {dfs(g, v, child);child[u] += child[v];}}}int main() {Int N;cin >> N;vector<vector<pair<int, Int>>> g(N);for (int i = 0; i < N - 1; ++i) {int u, v, w;cin >> u >> v >> w;--u; --v;g[u].emplace_back(v, w);g[v].emplace_back(u, w);}vector<Int> child(N, -1);dfs(g, 0, child);Int ans = 0;deque<int> que;que.push_back(0);vector<bool> used(N, false);while (!que.empty()) {int u = que.front(); que.pop_front();if (used[u]) { continue; }used[u] = true;for (auto p : g[u]) {int v = p.first;if (used[v]) { continue; }ans += child[v] * (N - child[v]) * p.second * 2;que.push_back(v);}}cout << ans << endl;return 0;}