Submission #80160

#TimeUsernameProblemLanguageResultExecution timeMemory
80160aminraChase (CEOI17_chase)C++14
0 / 100
294 ms180096 KiB
#include <bits/stdc++.h>
using namespace std;
typedef long long ll;
typedef long double ld;
const int MOD = (int)1e9 + 7;
const int MAXN = (int)1e5 + 7;
const int MAXS = (int)107;
const int infint = (int)1e9;
const ll inf = 1e18;
ll n, v, dp[MAXN][MAXS][2], P[MAXN], val[MAXN];
vector<ll> G[MAXN];
void dfs(int u, int p)
{
	if(p == -1)
	{
		dp[u][0][0] = 0;
		dp[u][1][1] = val[u];
	}
	else
	{
		for (int j = 0; j <= v; j++)
		{
			dp[u][j][0] = max(dp[p][j][1], dp[p][j][0]);
			if(j)
				dp[u][j][1] = max(dp[p][j - 1][0] + val[u] - P[p], dp[p][j - 1][1] + val[u] - P[p]);
		}
	}
	for (auto v : G[u])
		if(v != p)
			dfs(v, u);
}
int main()
{
	ios::sync_with_stdio(false);
	cin.tie(0); cout.tie(0);
	cin >> n >> v;
	for (int i = 1; i <= n; i++)
		cin >> P[i];
	for (int i = 0; i < n - 1; i++)
	{
		ll u, v;
		cin >> u >> v;
		val[v] += P[u];
		val[u] += P[v];
		G[u].push_back(v);
		G[v].push_back(u);
	}
	for (int i = 1; i <= n; i++)
		for (int j = 1; j <= v; j++)
			dp[i][j][0] = -inf, dp[i][j][1] = -inf;
	ll root = 6;
	dfs(root, -1);
	ll ans = 0;
	for (int i = 1; i <= n; i++)
		for (int j = 0; j <= v; j++)
		{
			ans = max(ans, max(dp[i][j][0], dp[i][j][1]));
		}
	cout << ans;
}
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...