[HAOI2015] 树上染色(树形 DP)

题目传送门icon-default.png?t=O83Ahttps://www.luogu.com.cn/problem/P3177

解题思路

设 f(i,j) 表示以 i 为根的子树染 j 个黑点的最大收益值。

设一共有 n 个节点,要染 m 个点。

完成 DP 状态的设计后,开始推导转移方程……

对于一个点 x,它下面有一条通向 to,权值为 w 的边。

我们枚举 j,表示以 x 为根的子树已经染了 j 个点;

然后在枚举 k 表示以 to 为子树要染 k 个点;

然后,这条边的贡献会是多少呢?

首先,如果 to 为根的子树有 k 个被染的点,那么是不是 to 以外应该会有 m-k 个点,然后两边的点两两组合,得到的贡献是 k \times (m-k) \times w

然后,如果 to 为根的子树有 k 个被染的点,那么是不是 to 为根的子树就会有 size[to]-k 个白点?对于 to 以外,应该会有 (n-m-(size[to-k])) 个白点。同理,两两组合,贡献是:(size[to]-k) \times (n-m-(size[to-k])) \times w

(其中 size[to] 表示 to 为根的子树的大小)。

于是,我们可以从 1 号点开始 dfs,同时进行 DP。

代码

记得开 long long!

#include<bits/stdc++.h>
using namespace std;
#define int long long
int n,m;
vector<pair<int,int> > g[2001];
int size[2001];
int f[2001][2001];void dfs(int x,int fa)
{size[x]=1;for(auto y:g[x]){int to=y.first;int w=y.second;if(to==fa)continue;dfs(to,x);for(int j=min(m,size[x]);j>=0;j--){for(int k=min(m,size[to]);k>=0;k--){if(j+k<=m){int temp;temp=k*(m-k)*w+(size[to]-k)*(n-m-(size[to]-k))*w;f[x][j+k]=max(f[x][j+k],f[x][j]+f[to][k]+temp);}}}size[x]+=size[to];}
}
signed main()
{ios::sync_with_stdio(0);cin.tie(0);cout.tie(0);cin>>n>>m;int u,v,w;for(int i=1;i<=n-1;i++){cin>>u>>v>>w;g[u].push_back(make_pair(v,w));g[v].push_back(make_pair(u,w));}dfs(1,0);cout<<f[1][m];return 0;
}

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.xdnf.cn/news/14252.html

如若内容造成侵权/违法违规/事实不符,请联系一条长河网进行投诉反馈,一经查实,立即删除!

相关文章

Python学习从0到1 day28 Python 高阶技巧 ⑧ 递归

那就祝我们爬不同的山&#xff0c;还能回到同一条路上&#xff0c;不是时时见面&#xff0c;但是时时惦记之人 —— 24.11.13 递归 1.什么是递归 递归在编程中是一种非常重要的算法 递归&#xff1a;即方法(函数)自己调用自己的一种特殊编程写法 函数调用自己&#xff0c;即…

代码随想录算法训练营第二十二天|491.递增子序列、46.全排列、47.全排列 II

491.递增子序列 题目链接&#xff1a;. - 力扣&#xff08;LeetCode&#xff09; 文章讲解&#xff1a;代码随想录 视频讲解&#xff1a;回溯算法精讲&#xff0c;树层去重与树枝去重 | LeetCode&#xff1a;491.递增子序列_哔哩哔哩_bilibili《代码随想录》算法公开课开讲啦…

二叉树的最大深度

给定一个二叉树 root &#xff0c;返回其最大深度。 二叉树的 最大深度 是指从根节点到最远叶子节点的最长路径上的节点数。 示例 1&#xff1a; 输入&#xff1a;root [3,9,20,null,null,15,7] 输出&#xff1a;3示例 2&#xff1a; 输入&#xff1a;root [1,null,2] 输出…

要读文献 | Acta Pharmacol Sin | 上海药物所徐华强团队发表综述:基于生成扩散模型的 AI 驱动抗体设计

近日&#xff0c;来自中国科学院上海药物研究所的徐华强团队在 Acta Pharmacologica Sinica 发表综述文章“AI-driven antibody design with generative diffusion models: current insights and future directions”。文章主要讨论了基于生成扩散模型的抗体设计的最新进展&…

Collections 工具类

在 Java 编程中&#xff0c;集合&#xff08;Collections&#xff09;是处理数据的核心工具之一。为了简化集合操作并提高代码的可读性和可维护性&#xff0c;JDK 提供了一个强大的工具类&#xff1a;java.util.Collections。这个类包含了一系列静态方法&#xff0c;用于对集合…

机器学习引领流体动力学新纪元:CFD、Fluent与OpenFOAM的深度融合

在科技日新月异的今天&#xff0c;机器学习正以前所未有的力量重塑着众多学科领域&#xff0c;其中&#xff0c;流体动力学便是受益匪浅的典范。作为计算流体力学&#xff08;CFD&#xff09;领域的两大巨头&#xff0c;Fluent与OpenFOAM正携手机器学习技术&#xff0c;共同开启…

django入门【05】模型介绍(二)——字段选项

文章目录 1、null 和 blank示例说明⭐ null 和 blank 结合使用的几种情况总结&#xff1a; 2、choices**choices 在 Django 中有以下几种形式&#xff1a;**&#xff08;1&#xff09; **简单的列表或元组形式**&#xff08;2&#xff09; **字典映射形式**&#xff08;3&#…

PL/SQL执行.sql文件

1.编写.sql文件&#xff0c;创建update.sql文件&#xff0c;文件如下&#xff1a; set feedback offset define off--更新表中所有人的年龄update a set age18;prompt Done. 2.打开plsql选择命令窗口&#xff0c;即选择File->New->Command Window&#xff1b; 打开后的…

论文5—《基于改进YOLOv5s的轻量化金银花识别方法》文献阅读分析报告

论文报告&#xff1a;基于改进YOLOv5s的轻量化金银花识别方法 论文报告文档 基于改进YOLOv5s的轻量化金银花识别方法 论文报告文档摘要国内外研究现状国内研究现状国外研究现状 研究目的研究问题使用的研究方法试验研究结果文献结论创新点和对现有研究的贡献1. 目标检测技术2. …

【数据结构】ArrayList与LinkedList详解!!!——Java

目录 一&#x1f31e;、List 1&#x1f345;.什么是List&#xff1f; 2&#x1f345;.List中的常用方法 二&#x1f31e;、ArrayList 1&#x1f34d;.什么是ArrayList? 2&#x1f34d;.ArrayList的实例化 3&#x1f34d;.ArrayList的使用 4&#x1f34d;.ArrayList的遍…

modbus协议 Mthings模拟器使用

进制转换 HEX 16进制 (0、1、2、3、4、5、6、7、8、9、A、B、C、D、E、F表示0-15) dec 10进制 n(16进制) -> 10 abcd.efg(n) d*n^0 c*n^1 b*n^2 a*n^3 e*n^-1 f*n^-2 g*n^-3&#xff08;10&#xff09; 10 -> n(16进制) Modbus基础概念 高位为NUM_H&…

微信版产品目录如何制作?

微信作为我国最流行的社交媒体平台&#xff0c;拥有庞大的用户群体。许多企业都希望通过微信来推广自己的产品&#xff0c;提高品牌知名度。制作一份精美、实用的微信版产品目录&#xff0c;是企业微信营销的重要手段。微信版产品目录的制作方法&#xff0c;帮助您轻松入门。 ​…

消息推送之SSE

一、简介 市面上很多系统都有 以上三种的消息提醒。但大多分为2类&#xff0c;一类移动端&#xff0c;一类web端比&#xff0c;通常在服务端会有若干张消息推送表&#xff0c;用来记录用户触发不同事件所推送不同类型的消息&#xff0c;前端主动查询&#xff08;拉&#x…

react中如何在一张图片上加一个灰色蒙层,并添加事件?

最终效果&#xff1a; 实现原理&#xff1a; 移动到图片上的时候&#xff0c;给img加一个伪类 &#xff01;&#xff01;此时就要地方要注意了&#xff0c;因为img标签是闭合的标签&#xff0c;无法直接添加 伪类&#xff08;::after&#xff09;&#xff0c;所以 我是在img外…

微搭低代码入门03函数

目录 1 函数的定义与调用2 参数与返回值3 默认参数4 将功能拆分成小函数5 函数表达式6 箭头函数7 低代码中的函数总结 在用低代码开发软件的时候&#xff0c;除了我们上两节介绍的变量、条件语句外&#xff0c;还有一个重要的概念叫函数。函数是执行特定功能的代码片段&#xf…

Zabbix中文监控指标数据乱码

1&#xff09;点击主机&#xff0c;选择Zabbix server 中的 图形 一项&#xff0c;可以看到当前显示的为乱码 2&#xff09; 下载字体文件&#xff1a; https://gitcode.com/open-source-toolkit/4a3db/blob/main/SimHei.zip 解压unzip -x SimHei.zip 3&#xff09; 替换字体文…

限价订单簿中的高频交易

数量技术宅团队在CSDN学院推出了量化投资系列课程 欢迎有兴趣系统学习量化投资的同学&#xff0c;点击下方链接报名&#xff1a; 量化投资速成营&#xff08;入门课程&#xff09; Python股票量化投资 Python期货量化投资 Python数字货币量化投资 C语言CTP期货交易系统开…

JDBC事务管理、四大特征(ACID)、事务提交与回滚、MySQL事务管理

目录 一、什么是JDBC事务&#xff1f; &#xff08;1&#xff09;事务概念。 &#xff08;2&#xff09;JDBC事务的实现。 1、提交。 2、回滚。 &#xff08;3&#xff09;生活中可以类比 JDBC 事务的例子。 1、以网上购物为例。 二、JDBC的四大事务&#xff08;ACID&#xff0…

操作系统离散存储练习题

1. (简答题)分页存储管理系统具有快表&#xff0c;内存访问时间为2ns&#xff0c;检索快表时间为0.5ns&#xff0c;快表命中率为80%&#xff0c;求有效访问时间 -分析&#xff1a;首先访问缓存&#xff08;快表&#xff09;&#xff0c;如果没有找到访问内存&#xff08;页表&…

【AI日报】2024年11月13号

我回来啦&#xff01;&#xff01;发现自己好久不发文章了。 在某头部AI公众号实习的过程中&#xff0c;学到太多太多了&#xff0c;也感谢某位大神的指点&#xff0c;也衷心祝愿他的IP可以越做越好 之后因为时间关系&#xff0c;可能要自己出来单干了。 在实习过程中学到的…