답안 #122222

# 제출 시각 아이디 문제 언어 결과 실행 시간 메모리
122222 2019-06-27T21:20:55 Z sams Chase (CEOI17_chase) C++14
0 / 100
646 ms 252568 KB
#include <bits/stdc++.h>

using namespace std;

typedef long long ll;
const int maxn = 1e5+10, maxk = 110;

int n, k;
ll dp[maxn][maxk], dp2[maxn][maxk], ant[maxn][maxk], ans, vis[maxn], vet[maxn];

vector <int> graph[maxn];

void solve(int u, int f = 0)
{
	for(int v: graph[u])
	{	
		if(v == f) continue;
		solve(v, u);

		for(int i = 1 ; i <= k ; ++i)
		{
			ll val = max(dp[v][i-1] + vis[v] - vet[u], dp[v][i]);
		
			if(val > dp[u][i]) dp2[u][i] = dp[u][i], dp[u][i] = val;
			else if(val > dp2[u][i]) dp2[u][i] = val;
		}
	}
}

void rotate(int u, int f = 0)
{
	for(int i = 1 ; i <= k ; ++i)
	{
		ans = max({ans, dp[u][i], dp[u][i-1] + vis[u]});
	}

	for(int v: graph[u])
	{
		if(v == f) continue;

		for(int i = 1 ; i <= k ; ++i)
		{
			ant[u][i] = dp[u][i];
			
			ll val = max(dp[v][i], dp[v][i-1] + vis[v] - vet[u]);

			if(val == dp[u][i])
			{
				dp[u][i] = dp2[u][i];
				
				val = 0;

				val = max(dp[u][i], dp[u][i-1] + vis[u] - vet[v]);

				if(val > dp[v][i]) dp2[v][i] = dp[v][i], dp[v][i] = val;
				else if(val > dp2[v][i]) dp2[v][i] = val;
			}
			
		}

		/*for(int i = 1 ; i <= k ; ++i)
		{
			ll val = max(dp[u][i], dp[u][i-1] + vis[u] - vet[v]);

			if(val > dp[v][i]) dp2[v][i] = dp[v][i], dp[v][i] = val;
			else if(val > dp2[v][i]) dp2[v][i] = val;
		}*/
		rotate(v, u);

		for(int i = 1 ; i <= k ; ++i) dp[u][i] = ant[u][i];
	}
}

int main()
{
	cin >> n >> k;

	for(int i = 1 ; i <= n ; ++i) cin >> vet[i];

	for(int i = 1 ; i < n ; ++i)
	{
		int u, v;
		cin >> u >> v;

		graph[u].push_back(v);
		graph[v].push_back(u);
	}

	for(int i = 1 ; i <= n ; ++i)
	{
		for(int v: graph[i])
		{
			vis[i] += vet[v];
		}
	}

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

	solve(1);
	rotate(1);

	cout << ans << '\n';
}
# 결과 실행 시간 메모리 Grader output
1 Correct 4 ms 2688 KB Output is correct
2 Incorrect 4 ms 2688 KB Output isn't correct
3 Halted 0 ms 0 KB -
# 결과 실행 시간 메모리 Grader output
1 Correct 4 ms 2688 KB Output is correct
2 Incorrect 4 ms 2688 KB Output isn't correct
3 Halted 0 ms 0 KB -
# 결과 실행 시간 메모리 Grader output
1 Correct 393 ms 141328 KB Output is correct
2 Correct 387 ms 141392 KB Output is correct
3 Correct 312 ms 180080 KB Output is correct
4 Correct 470 ms 243876 KB Output is correct
5 Incorrect 646 ms 252568 KB Output isn't correct
6 Halted 0 ms 0 KB -
# 결과 실행 시간 메모리 Grader output
1 Correct 4 ms 2688 KB Output is correct
2 Incorrect 4 ms 2688 KB Output isn't correct
3 Halted 0 ms 0 KB -