Submission #31607

#TimeUsernameProblemLanguageResultExecution timeMemory
31607minkankBeads and wires (APIO14_beads)C++14
0 / 100
9 ms2432 KiB
#include <bits/stdc++.h> using namespace std; typedef pair<int, int> ii; const int N = 1e4 + 5; int n, dp[N][2], ans; vector<ii> a[N], b[N]; vector<int> l[N], r[N]; void dfs(int u, int p) { dp[u][0] = dp[u][1] = 0; int cnt = 0; for(int i = 0; i < a[u].size(); ++i) { int v = a[u][i].first; if(v == p) continue; dfs(v, u); cnt++; b[u][cnt] = a[u][i]; } l[u][0] = 0; for(int i = 1; i <= cnt; ++i) { int v = b[u][i].first, w = b[u][i].second; l[u][i] = l[u][i - 1] + max(dp[v][1] + w, dp[v][0]); } r[u][cnt + 1] = 0; for(int i = cnt; i >= 1; --i) { int v = b[u][i].first, w = b[u][i].second; r[u][i] = r[u][i + 1] + max(dp[v][1] + w, dp[v][0]); } dp[u][0] = l[u][cnt]; for(int i = 1; i <= cnt; ++i) { int v = b[u][i].first, w = b[u][i].second; dp[u][1] = max(dp[u][1], l[u][i - 1] + r[u][i + 1] + dp[v][0] + w); } if(a[u].size() == 1) dp[u][1] = -1e9; } int main() { cin >> n; for(int i = 1; i < n; ++i) { int u, v, w; cin >> u >> v >> w; a[u].push_back(ii(v, w)); a[v].push_back(ii(u, w)); } for(int i = 1; i <= n; ++i) l[i].assign(a[i].size() + 2, 0), r[i].assign(a[i].size() + 2, 0), b[i].assign(a[i].size() + 2, ii(0, 0)); vector<int> pos; for(int i = 1; i <= n; ++i) pos.push_back(i); random_shuffle(pos.begin(), pos.end()); for(int p = 0; p <= 100; ++p) { int i = pos[p]; dfs(i, i); ans = max(ans, dp[i][0]); } cout << ans; }

Compilation message (stderr)

beads.cpp: In function 'void dfs(int, int)':
beads.cpp:15:22: warning: comparison between signed and unsigned integer expressions [-Wsign-compare]
     for(int i = 0; i < a[u].size(); ++i) {
                    ~~^~~~~~~~~~~~~
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...