제출 #1335705

#제출 시각아이디문제언어결과실행 시간메모리
1335705Jawad_Akbar_JJDostavljač (COCI18_dostavljac)C++20
140 / 140
462 ms2436 KiB
#include <iostream>
#include <vector>
#include <algorithm>

using namespace std;
const int N = 505;
vector<int> nei[N], vec;
int dp[2 * N][N], a[N], fst[N], lst[2 * N], Par[N];

void dfs(int u, int p){
	Par[u] = p;
	for (int i : nei[u])
		if (i != p)
			dfs(i, u);
}

void sendToLast(int v){
	while (v - 1){
		int p = Par[v];
		nei[p].erase(find(begin(nei[p]), end(nei[p]), v));
		nei[p].push_back(v);
		v = p;
	}
}

void getOrder(int u){
	fst[u] = vec.size();
	vec.push_back(u);
	for (int i : nei[u])
		if (i != Par[u])
			getOrder(i), vec.push_back(u);
}

int main(){
	int n, m, Ans = 0;
	cin>>n>>m;

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

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

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

	dfs(1, 0);
	for (int l=1;l<=n;l++){
		sendToLast(l);
		vec = {};
		getOrder(1);
		for (int i=0;i<vec.size();i++){
			for (int j=0;j<=m;j++)
				dp[i][j] = -1e9;
		}
		dp[0][0] = 0;
		for (int i=0;i<vec.size();i++){

			if (fst[vec[i]] == i){
				for (int j=m-1;j>=0;j--)
					dp[i][j+1] = max(dp[i][j+1], dp[i][j] + a[vec[i]]), Ans = max(Ans, dp[i][j+1]);
			}
			else{
				for (int j=0;j<=m;j++)
					dp[i][j] = max(dp[i][j], dp[lst[vec[i]]][j]);
			}
			lst[vec[i]] = i;
			for (int j=0;j<=m;j++)
				dp[i+1][j+1] = max(dp[i+1][j+1], dp[i][j]);
		}
	}
	cout<<Ans<<'\n';	
}
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...