Advertisement
Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- #include <bits/stdc++.h>
- using namespace std;
- using ll = long long;
- using ld = long double;
- using ull = unsigned long long;
- constexpr bool typetest = 0;
- constexpr int N = 2e2 + 5;
- constexpr int Inf = 1e9 + 7;
- int n, p, m[N], cnt[N];
- int dp[N][N][N], par[N][N][N];
- vector<int> adj[N];
- int a[N], ans(-Inf), piv(1);
- void Read()
- {
- cin >> n >> p;
- for (int i = 1; i <= n; ++i)
- cin >> a[i];
- for (int i = 1; i < n; ++i)
- {
- int u, v;
- cin >> u >> v;
- adj[u].emplace_back(v);
- adj[v].emplace_back(u);
- }
- }
- void dfs(int v, int parpar = 0)
- {
- cnt[v] = 1;
- for (int i = (int)adj[v].size() - 1; ~i; --i)
- if (adj[v][i] == parpar)
- adj[v][i] = adj[v].back(), adj[v].pop_back();
- else
- dfs(adj[v][i], v), cnt[v] += cnt[adj[v][i]];
- m[v] = adj[v].size();
- adj[v].emplace_back(0);
- sort(adj[v].begin(), adj[v].end());
- dp[v][0][1] = a[v];
- for (int i = 1, sum(1); i <= m[v]; ++i)
- {
- sum += cnt[adj[v][i]] + 1;
- for (int j = 1; j <= sum; ++j)
- for (int t = min(cnt[adj[v][i]], j - 1), tmp; ~t; --t)
- if (dp[v][i][j] < (tmp = dp[v][i - 1][j - t] + dp[adj[v][i]][m[adj[v][i]]][t]))
- {
- dp[v][i][j] = tmp;
- par[v][i][j] = t;
- }
- //cout << v << " " << i << ": " << sum << "\n";
- }
- if (ans < dp[v][m[v]][p])
- {
- ans = dp[v][m[v]][p];
- piv = v;
- }
- dp[v][m[v]][0] = 0;
- }
- void Trace(int v, int p)
- {
- if (p != 0)
- cout << v << " ";
- if (p <= 1)
- return;
- for (int i = m[v]; i; --i)
- {
- Trace(adj[v][i], par[v][i][p]);
- p -= par[v][i][p];
- }
- }
- void Solve()
- {
- fill_n(&dp[0][0][0], N * N * N, -Inf);
- memset(par, 0, sizeof par);
- dfs(1);
- //cout << ans << " " << piv << "\n";
- //cout << m[2] << " " << dp[2][1][2] << " " << dp[3][0][1] << "\n";
- Trace(piv, p);
- }
- int32_t main()
- {
- ios::sync_with_stdio(0);
- cin.tie(0);
- cout.tie(0);
- int t(1);
- if (typetest)
- cin >> t;
- for (int _ = 1; _ <= t; ++_)
- {
- Read();
- Solve();
- }
- }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement