제출 #585742

#제출 시각아이디문제언어결과실행 시간메모리
585742tengiz05Chase (CEOI17_chase)C++17
70 / 100
572 ms16076 KiB
#include <bits/stdc++.h> using i64 = long long; using namespace std; void solve() { int n, k; cin >> n >> k; vector<int> a(n); for (int i = 0; i < n; i++) { cin >> a[i]; } vector<vector<int>> e(n); for (int i = 0; i < n - 1; i++) { int u, v; cin >> u >> v; u--; v--; e[u].push_back(v); e[v].push_back(u); } multiset<i64> q; i64 ans = 0; function<void(int, int)> dfs = [&](int u, int p) { i64 s = 0; for (int v : e[u]) { if (v != p) { s += a[v]; } } q.insert(s); i64 res = 0; auto it = q.end(); for (int i = 0; i < min(k, int(q.size())); i++) { it = prev(it); res += *it; } ans = max(ans, res); for (int v : e[u]) { if (v != p) { dfs(v, u); } } q.erase(q.find(s)); }; if (n <= 1000) { for (int i = 0; i < n; i++) { dfs(i, -1); } } else { dfs(0, -1); } cout << ans << "\n"; } int main() { ios::sync_with_stdio(false); cin.tie(nullptr); int t = 1; // cin >> t; while (t--) { solve(); } return 0; } /* 12 2 2 3 3 8 1 5 6 7 8 3 5 4 2 1 2 7 3 4 4 7 7 6 5 6 6 8 6 9 7 10 10 11 10 12 */
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...