黑白染色树
黑白染色树
题意
有一棵点数为
思路
树形 dp,定义
转移方程:
即所有
计算出
注意倒序枚举
代码
#include <bits/stdc++.h>
#define int long long
using namespace std;
const int N = 2e3 + 5;
int n, k, tot, siz[N], dp[N][N];
int ver[N << 1], nxt[N << 1], head[N], edge[N << 1];
void add(int x, int y, int z) {
ver[++ tot] = y;
nxt[tot] = head[x];
head[x] = tot;
edge[tot] = z;
}
void dfs(int x, int fa) {
siz[x] = 1;
for (int i = head[x], y; i; i = nxt[i])
if ((y = ver[i]) != fa) {
dfs(y, x);
for (int j = siz[x]; j >= 0; j --)
for (int t = siz[y]; t >= 0; t --)
dp[x][j + t] = max(dp[x][j + t], dp[x][j] + dp[y][t] + edge[i] * t * (k - t) + edge[i] * (n - k - siz[y] + t) * (siz[y] - t));
siz[x] += siz[y];
}
}
signed main() {
cin >> n >> k;
for (int i = 1, u, v, w; i < n; i ++) {
cin >> u >> v >> w;
add(u, v, w); add(v, u, w);
}
dfs(1, 0);
cout << dp[1][k] << "\n";
return 0;
}
本文来自博客园,作者:maniubi,转载请注明原文链接:https://www.cnblogs.com/maniubi/p/18399784,orz
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· 地球OL攻略 —— 某应届生求职总结
· 周边上新:园子的第一款马克杯温暖上架
· Open-Sora 2.0 重磅开源!
· 提示词工程——AI应用必不可少的技术
· .NET周刊【3月第1期 2025-03-02】
2022-09-06 CF1717A题解