WA 77 pts 求条
查看原帖
WA 77 pts 求条
1118614
I_Love_DS楼主2024/10/3 21:32

能给我解决问题最好,别给我甩个链接

#include <bits/stdc++.h>

using namespace std;

const int N = 110;

int n, q, f[N][N], vis[N], d[N];

struct node {
	int v, w;
} s[N][2];
bool is[N];

vector <node> e[N];

void dfs(int u) {
	vis[u] = 1;
	for (auto v : e[u]) {
		if (!vis[v.v]) {
			is[u] = 1;
			if (s[u][0].v) s[u][1] = v;
			else s[u][0] = v;
			dfs(v.v);
			d[u] += d[v.v] + 1;
		}
	}
}

void calc(int u) {
	if (is[u]) {
		calc(s[u][0].v), calc(s[u][1].v);
		for (int i = 1; i <= min(d[u], q); i++) 
			f[u][i] = max({f[u][i], f[s[u][0].v][i - 1] + s[u][0].w, f[s[u][1].v][i - 1] + s[u][1].w});
		for (int i = 2; i <= min(d[u], q); i++) 
			f[u][i] = max(f[u][i], f[s[u][0].v][i - 2] + s[u][0].w + f[s[u][1].v][i - 2] + s[u][1].w);
	}
}

int main() {
	scanf("%d%d", &n, &q);
	for (int i = 1; i < n; i++) {
		int u, v, w;
		scanf("%d%d%d", &u, &v, &w);
		e[u].push_back({v, w});
		e[v].push_back({u, w});
	}
	dfs(1);
	calc(1);
	printf("%d", f[1][q]);
	return 0;
}
2024/10/3 21:32
加载中...