尧图网站建设 尧图网络
  • 首页
  • 关于我们
  • 服务项目
  • 案例展示
  • 建站流程
  • 资讯中心
  • 联系我们
首页/资讯中心/详情

P3177 [HAOI2015] 树上染色

P3177 [HAOI2015] 树上染色
📅 发布时间:2026/6/19 0:10:22

题目传送门

树形背包

题意

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

题解

首先套路的设 \(f_{u,t}\) 为 \(u\) 子树内选 \(t\) 个黑色点的答案,并套路的做树上背包。

一开始想的比较朴素,直接以点对为对象统计答案,但是这样搞得话合并子树的时候还要记录子树内到根节点的距离和,要多维护一个数组,感觉很难写,所以就看看有没有更简单的方法。

刚才的问题是在于我们必须关注每个点在子树中的位置,既然统计的是边的贡献,何妨不以边为对象,去关注一条边对答案的贡献呢?

对于一条边,我们只需要知道它被经过了几次,就能算出它产生的贡献,显然,边的两侧有多少组同色的点,边就会被经过几次,于是乎,我们只需要枚举子树内染成黑色的点的数量,就能算出合并时连接两颗树的边的贡献了。

当 \(v\) 子树要合并到 \(u\) 子树中,并且 \(v\) 子树中有 \(j\) 个黑色点时,连接两颗树的边被经过的次数为 \(j(m-j)+(sz_v-j)(n-sz_v-(m-j))\)。

转移显然。

代码

#include <bits/stdc++.h>
#define int long long
using namespace std;
const int N=2005;
int n,k;
int f[N][N],sz[N],g[N];
vector<pair<int,int>> e[N];void dfs(int u,int fa){sz[u]=1;f[u][0]=0;memset(g,0,sizeof g);for(const auto &it:e[u]){int v=it.first,w=it.second;if(v==fa) continue;dfs(v,u);for(int i=0;i<=min(sz[u],k);i++)for(int j=0;j<=min(sz[v],k-i);j++)g[i+j]=max(g[i+j],f[u][i]+f[v][j]+w*(j*(k-j)+(sz[v]-j)*(n-sz[v]-k+j)));sz[u]+=sz[v];for(int i=0;i<=sz[u];i++) f[u][i]=g[i];}
}signed main(){cin.tie(nullptr)->sync_with_stdio(false);cin>>n>>k;for(int i=1;i<n;i++){int u,v,w;cin>>u>>v>>w;e[u].emplace_back(v,w);e[v].emplace_back(u,w);}dfs(1,1);cout<<f[1][k];return 0;
}

相关新闻

  • NOIP2024复盘
  • 题解:CF351B Jeff and Furik
  • js和vue的数据类型

最新新闻

  • 深度学习进阶(三十一)FlashAttention:IO 感知的精确注意力
  • 6个免费方法让你的手机视频秒变MP4 - 软件工具教程方法
  • Kali Linux实战:ARP欺骗攻击原理、环境搭建与Wireshark流量分析
  • 杭州靠谱品牌首饰回收排行,光谱验金透明称重全款现结 - 奢品小当家
  • 2026年安徽省合肥市合肥医药卫生学校招生简章官网发布:报名入口+报考指南 - cc江江
  • 武汉钻石回收怎么选?2026年实测合规机构名录 - 薛定谔的梨花猫

日新闻

  • 5分钟掌握Python进化算法:Geatpy高性能优化工具完全指南
  • Microchip 24AA044 EEPROM选型与应用全指南:从参数解析到实战编程
  • 华为的鸿蒙到底有多牛?为什么称作遥遥领先?

周新闻

  • 3步解锁iOS设备:applera1n激活锁绕过完全指南
  • 39 2026 人工智能证书终极盘点,普通人选 AI 证书可以从这些方向入手
  • Redis 暴露公网有多危险?从端口检查到补救步骤

月新闻

  • 【总结】入门篇:50句话让你记住架构核心概念
  • WeChatMsg技术方案解析:实现Mac微信数据自主管理的完整解决方案
  • WeChatMsg:革新性微信数据备份方案,打造你的专属数字记忆库

关于尧图

  • 公司简介
  • 团队介绍
  • 企业文化
  • 荣誉资质

服务项目

  • 定制开发
  • 电商建站
  • UI 设计
  • 运维服务

快速链接

  • 案例展示
  • 建站流程
  • 常见问题
  • 资讯中心

联系方式

  • 📍北京市朝阳区互联网产业园 A 座 10 层
  • 📞400-888-8888
  • ✉️contact@rkmt.cn
  • 🕐周一至周日 9:00-21:00

© 2024 北京尧图网络科技有限公司 版权所有 | 京 ICP 备 XXXXXXXX 号