Submission #571767

#TimeUsernameProblemLanguageResultExecution timeMemory
571767piOOEChase (CEOI17_chase)C++17
20 / 100
4049 ms6536 KiB
#include <bits/stdc++.h> using namespace std; #define sz(x) ((int)size(x)) #define all(x) begin(x), end(x) #define trace(x) cout << #x << ": " << (x) << endl; typedef long long ll; mt19937 rnd(chrono::steady_clock::now().time_since_epoch().count()); int rand(int l, int r) { return (int) ((ll) rnd() % (r - l + 1)) + l; } const int N = 100001; const ll infL = 3e18; vector<int> g[N]; int n, k, parent[N], depth[N]; ll p[N], pp[N]; void dfs(int v) { for (int to: g[v]) { if (to != parent[v]) { parent[to] = v; depth[to] = depth[v] + 1; dfs(to); } } } int main() { ios::sync_with_stdio(false); cin.tie(nullptr); cin >> n >> k; for (int i = 0; i < n; ++i) { cin >> p[i]; } for (int i = 1; i < n; ++i) { int a, b; cin >> a >> b; --a, --b; g[a].push_back(b); g[b].push_back(a); } ll ans = 0; if (n <= 1000) { for (int s = 0; s < n; ++s) { parent[s] = -1; depth[s] = 1; dfs(s); for (int t = 0; t < n; ++t) { vector<int> now; { int x = t; while (x != -1) { now.push_back(x); x = parent[x]; } } assert(sz(now) == depth[t]); vector<ll> nw; for (int i = 0; i < sz(now); ++i) { int v = now[i]; ll sum = 0; for (int to: g[v]) { if (i == 0 || to != now[i - 1]) sum += p[to]; } nw.push_back(sum); } sort(all(nw), greater<>()); ans = max(ans, accumulate(nw.begin(), nw.begin() + min(k, sz(nw)), 0ll)); } } cout << ans; } else { } 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...