Submission #537676

#TimeUsernameProblemLanguageResultExecution timeMemory
537676siewjhPaths (RMI21_paths)C++17
36 / 100
204 ms6432 KiB
#include <bits/stdc++.h> using namespace std; const int MAXN = 1005; typedef long long ll; vector<pair<int, ll>> adjlist[1005]; ll dp[1005][105]; int nodes, choose; int dfs(int x, int par){ int leaf = 0; dp[x][0] = 0; for (auto nxt : adjlist[x]){ int nn = nxt.first; if (nn == par) continue; leaf += dfs(nn, x); } for (auto nxt : adjlist[x]){ int nn = nxt.first; ll nd = nxt.second; if (nn == par) continue; ll dph[1005]; int mch = min(leaf, choose); for (int i = 0; i <= mch; i++) dph[i] = dp[x][i]; for (int i = 1; i <= mch; i++){ if (dp[nn][i] == -1) break; for (int j = i; j <= mch; j++){ if (dp[x][j - i] == -1) break; dph[j] = max(dph[j], dp[nn][i] + dp[x][j - i] + nd); } } for (int i = 0; i <= mch; i++) dp[x][i] = dph[i]; } if (leaf == 0) { leaf = 1; dp[x][1] = 0; } return leaf; } int main(){ ios_base::sync_with_stdio(false); cin.tie(0); cout.tie(0); cin >> nodes >> choose; for (int i = 1; i < nodes; i++){ int a, b; ll c; cin >> a >> b >> c; adjlist[a].push_back({b, c}); adjlist[b].push_back({a, c}); } for (int i = 1; i <= nodes; i++){ memset(dp, -1, sizeof(dp)); dfs(i, -1); cout << dp[i][choose] << '\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...