답안 #121553

# 제출 시각 아이디 문제 언어 결과 실행 시간 메모리
121553 2019-06-26T18:47:23 Z pamaj Chase (CEOI17_chase) C++14
0 / 100
485 ms 100904 KB
#include <bits/stdc++.h>
using namespace std;

#define int int64_t

const int maxn = 1e5 + 10;

int v[maxn], p[maxn], n, t, dp[maxn][110];
vector<int> G[maxn];

int solve(int x, int y, int num)
{
	if(dp[x][num] != -1) return dp[x][num];
	if(num == 0) return 0;
	
	int best = 0;

	for(auto u : G[x])
	{
		if(u == y) continue;

		int caso1 = solve(u, x, num);
		int caso2 = v[u] + -p[y] + solve(u, x, num - 1);

		best = max({best, caso1, caso2});
	}


	return dp[x][num] = best;
}

int32_t main()
{
	cin >> n >> t;

	for(int i = 1; i <= n; i++)
	{
		cin >> p[i];
	}

	for(int i = 0; i < n - 1; i++)
	{
		int a, b;
		cin >> a >> b;

		G[a].push_back(b);
		G[b].push_back(a);
	}

	for(int i = 1; i <= n; i++)
	{
		for(auto u : G[i])
		{
			v[i] += p[u];
		}
	}

	memset(dp, -1, sizeof(dp));

	int ans = 0;

	for(int i = 1; i <= n; i++)
	{
		ans = max(ans, solve(i, i, t));
		//cout << i << " " << solve(i, i, t) << "\n";
	}
	cout << ans << "\n";

	for(int i = 1; i <= n; i++)
	{
		//cout << i << " " << v[i] << "\n";
	}
}
# 결과 실행 시간 메모리 Grader output
1 Incorrect 70 ms 88824 KB Output isn't correct
2 Halted 0 ms 0 KB -
# 결과 실행 시간 메모리 Grader output
1 Incorrect 70 ms 88824 KB Output isn't correct
2 Halted 0 ms 0 KB -
# 결과 실행 시간 메모리 Grader output
1 Incorrect 485 ms 100904 KB Output isn't correct
2 Halted 0 ms 0 KB -
# 결과 실행 시간 메모리 Grader output
1 Incorrect 70 ms 88824 KB Output isn't correct
2 Halted 0 ms 0 KB -