【每日一题】[HAOI2015]树上染色(树形dp)

[HAOI2015]树上染色

https://ac.nowcoder.com/acm/problem/19996

Description

有一棵点数为 的树,树边有边权。给你一个在 之内的正整数 ,你要在这棵树中选择 个点,将其染成黑色,并将其他的 个点染成白色。
将所有点染色后,你会获得黑点两两之间的距离加上白点两两之间距离的和的收益。问收益最大值是多少。

Solution

, 考虑二维树形
表示以 为根,选取个作为黑色节点的收益
考虑每天边权的贡献,类似于树上两点的距离,对于一条边,它连接两端的相同颜色节点都会产生贡献
假设边的左边有 个黑节点, 个白节点,右边有 个黑节点, 个白节点,边权为
那么贡献为
但是显然没有用到 的条件
考虑在 的时候记录子树大小
枚举到根节点 和子节点 的黑色节点个数分别为
那么有
其中 为连接两点的边权的贡献

考虑消除后效性,类似于背包问题,我们倒叙枚举即可。

#include<bits/stdc++.h>

typedef long long ll;
using namespace std;
#define emplace_back push_back

const int N = 1e6 + 5;
const int mod = 998244353;

vector<pair<int, int> > G[N];
ll dp[2005][2005], n, k;
ll sz[2005];

ll cal(int u, int v, int w, int i, int j) {
  return dp[u][i] + dp[v][j] + 1LL * w * j * (k - j) + w * (n - k - (sz[v] - j)) * (sz[v] - j);
}
void dfs(int u, int par) {
  sz[u] = 1;
  for (auto &it : G[u]) {
    int v = it.first;
    if (v == par) continue;
    dfs(v, u);
    for (int i = sz[u]; i >= 0; i--) {
      for (int j = sz[v]; j >= 0; j--) {
        dp[u][i + j] = max(dp[u][i + j], cal(u, v, it.second, i, j));
      }
    }
    sz[u] += sz[v];
  }
}
void solve() {
  cin >> n >> k;
  for (int i = 0; i < n - 1; i++) {
    int u, v, w; cin >> u >> v >> w;
    G[u].emplace_back({v, w});
    G[v].emplace_back({u, w});
  }
  dfs(1, 0);
  cout << dp[1][k] << '\n';
}
int main() {
  ios::sync_with_stdio(false), cin.tie(0),  cout.tie(0);
  int T = 1; //cin >> T;
  while(T--) {
    solve();
  }
  return 0;
}
Kurisu与牛客的每日一题 文章被收录于专栏

每日一题

全部评论

相关推荐

暴杀流调参工作者:春招又试了一些岗位,现在投递很有意思,不仅要精心准备简历,投递官网还得把自己写的东西一条一条复制上去,阿里更是各个bu都有自己的官网,重复操作无数次,投完简历卡完学历了,又该写性格测评、能力测评,写完了又要写专业笔试,最近还有些公司搞了AI辅助编程笔试,有些还有AI面试,对着机器人话也听不明白录屏硬说,终于到了人工面试又要一二三四面,小组成员面主管面部门主管面hr面,次次都没出错机会,稍有不慎就是挂。 卡学历卡项目卡论文卡实习什么都卡,没有不卡的😂
点赞 评论 收藏
分享
评论
10
收藏
分享

创作者周榜

更多
正在热议
更多
# 春招至今,你的战绩如何? #
10315次浏览 92人参与
# 你的实习产出是真实的还是包装的? #
1832次浏览 42人参与
# 米连集团26产品管培生项目 #
5886次浏览 215人参与
# 军工所铁饭碗 vs 互联网高薪资,你会选谁 #
7537次浏览 43人参与
# 简历第一个项目做什么 #
31643次浏览 333人参与
# 重来一次,我还会选择这个专业吗 #
433423次浏览 3926人参与
# MiniMax求职进展汇总 #
23961次浏览 308人参与
# 当下环境,你会继续卷互联网,还是看其他行业机会 #
187071次浏览 1122人参与
# 牛客AI文生图 #
21418次浏览 238人参与
# 不考虑薪资和职业,你最想做什么工作呢? #
152338次浏览 887人参与
# 研究所笔面经互助 #
118892次浏览 577人参与
# 简历中的项目经历要怎么写? #
310182次浏览 4202人参与
# AI时代,哪些岗位最容易被淘汰 #
63576次浏览 813人参与
# 面试紧张时你会有什么表现? #
30502次浏览 188人参与
# 你今年的平均薪资是多少? #
213063次浏览 1039人参与
# 你怎么看待AI面试 #
179990次浏览 1245人参与
# 高学历就一定能找到好工作吗? #
64323次浏览 620人参与
# 你最满意的offer薪资是哪家公司? #
76474次浏览 374人参与
# 我的求职精神状态 #
448028次浏览 3129人参与
# 正在春招的你,也参与了去年秋招吗? #
363346次浏览 2638人参与
# 腾讯音乐求职进展汇总 #
160627次浏览 1111人参与
# 校招笔试 #
470762次浏览 2964人参与
牛客网
牛客网在线编程
牛客网题解
牛客企业服务