WA16pts求助
查看原帖
WA16pts求助
520777
LaoXu666楼主2023/7/27 11:11
#include <iostream>
#include <utility>
#include <vector>

int N, Q, DP[105][105];
std::vector<std::pair<int, int> > Tree[105];
int EdgeNum[105];

void DFS(int Node, int Prev) {
	for (auto Edge: Tree[Node]) {
		int Node2 = Edge.first, Weight = Edge.second;
		if (Node2 == Prev) continue;
		DFS(Node2, Node);
		EdgeNum[Node] = EdgeNum[Node2] + 1;
		for (int This = std::min(EdgeNum[Node], Q); This != 0; This--) {
			for (int Previous = 0; Previous <= EdgeNum[Node2]; Previous++) {
				DP[Node][This] = std::max(DP[Node][This], DP[Node][This - Previous - 1] + DP[Node2][Previous] + Weight);
			}
		}
	}
}

int main() {
	std::cin >> N >> Q;
	for (int EdgeId = 0; EdgeId < N - 1; EdgeId++) {
		int Node1, Node2, AppleNum;
		std::cin >> Node1 >> Node2 >> AppleNum;
		Tree[Node1].emplace_back(Node2, AppleNum);
		Tree[Node2].emplace_back(Node1, AppleNum);
	}
	DFS(1, -1);
	std::cout << DP[1][Q] << '\n';
	return 0;
}

2023/7/27 11:11
加载中...