首页 > 其他分享 >黑白染色树

黑白染色树

时间:2024-09-06 10:35:52浏览次数:10  
标签:int 染色 白点 黑白 times 黑点 siz dp

黑白染色树

题意

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

思路

树形 dp,定义 \(dp_{i,j}\) 表示以 \(i\) 为根的字数内染了 \(j\) 个节点为黑色的最大收益值。

转移方程:

\[dp_{i,j+t}=dp_{i,j}+dp_{v,t}+(t\times(k-t)+(n-k-siz_v+t)\times(siz_v-t))\times w(i,v) \]

即所有 \(v\) 子树内的黑点和所有 \(v\) 子树外的黑点连边时都要经过边 \((i,v)\),白点同理。

计算出 \(v\) 子树内的黑点个数和白点个数,用总黑点个数和总白点个数减去它们,相乘就是 \((i,v)\) 被经过的次数,最后乘上边权就是贡献。

注意倒序枚举 \(j\) 避免后效性。

代码

#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;
}

标签:int,染色,白点,黑白,times,黑点,siz,dp
From: https://www.cnblogs.com/maniubi/p/18399784

相关文章

  • AbMole|DNA双链断裂修复中的序列与染色质特征:MRX复合体的作用与机制
     在生物学领域中,DNA双链断裂(DSB)作为一种极具破坏性的基因组损伤,其准确且高效的修复对于维持细胞基因组的稳定性和功能至关重要。由来自哥伦比亚大学欧文医学中心微生物学与免疫学系的RobertGnügge和瑞士苏黎世工业大学(ETH)生物化学研究所生物系的 GiordanoReginato,Petr......
  • 超实用技巧!微信小程序圆码转换方形黑白二维码
    如今二维码在各行各业都被广泛应用,好多平台为了方便分享,都能把个人账号主页、发布的视频/文章、上架的商品等生成二维码,微信小程序自然也不例外。有些朋友因为二维码的应用场景比较复杂,就想把小程序的圆形二维码变成常规的方形二维码,这该咋整呢?其实很简单!我们把圆码变成二......
  • 全染色算法及其matlab程序详解
    #################本文为学习《图论算法及其MATLAB实现》的学习笔记#################全染色以及全色数图G的顶点和边满足使相邻或关联的元素得到不同的颜色,则称此染色为G的全染色;其所用最少色数称为G的全色数算法用途给出简单图的染色数尽可能少的全染色方案算法思想从......
  • 顶点染色算法的matlab程序详解
    #################本文为学习《图论算法及其MATLAB实现》的学习笔记#################算法用途给出简单图的染色数尽可能少的顶点染色方案算法思想从顶点度数最小的顶点开始染色,找到不与其相邻的顶点并选择其中一个顶点进行染色,再找与这两个顶点都不相邻的顶点集合,并对其中......
  • uni-app里引入阿里彩色矢量图标(Symbol),却发现图标显示为黑白
     当使用uniapp并尝试引入阿里iconfont的彩色图标时,发现图标显示为黑白。原因是Fontclass模式不支持彩色图标。解决方法是下载Symbol模式的SVG文件,使用iconfont-tools进行转换,然后在项目中全局引入转换后的CSS文件,最终在组件中正确显示彩色图标。解决步骤如下:1、选择想要的......
  • 【第59课】XML&XXE安全&无回显方案&OOB盲注&DTD外部实体&黑白盒挖掘
    知识点:1、XXE&XML-原理-用途&外实体&安全2、XXE&XML-黑盒-格式类型&数据类型3、XXE&XML-白盒-函数审计&回显方案详细点:XML被设计为传输和存储数据,XML文档结构包括XML声明、DTD文档类型定义(可选)、文档元素,其焦点是数据的内容,其把数据从HTML分离,是独立于软件和硬件的信息传......
  • 860. 染色法判定二分图
    //860.染色法判定二分图.cpp:此文件包含"main"函数。程序执行将在此处开始并结束。///*https://www.acwing.com/problem/content/description/862/给定一个n个点m条边的无向图,图中可能存在重边和自环。请你判断这个图是否是二分图。输入格式第一行包含两个整数......
  • 题解:P10543 [THUPC 2024 决赛] 黑白
    好题。题意\(n\timesm\)的网格图初始每个格子有黑有白,两人轮流操作,每次选择一个白格染黑。操作后不能存在一条\((1,1)\)到\((n,m)\)的路径,否则本次操作者输,另一人赢。思路首先判断是否一上来就输了。易发现到最后一定会操作到只剩一条道路,设路径长度为\(s\),那么\(s\)......
  • nature immunology | BACH2调控“调节性”和“促炎性”TH17细胞的染色质多样化状态
    –https://doi.org/10.1038/s41590-024-01901-1BACH2regulatesdiversificationofregulatoryandproinflammatorychromatinstatesinTH17cells留意更多内容,欢迎关注微信公众号:组学之心研究团队和研究单位AvivRegev–GenentechVijayK.Kuchroo–BroadInsti......
  • 使用Adobe Acrobat Pro DC 把彩色PDF图像改为黑白PDF,且不改变原图像尺寸。
    一、背景:1.编辑要求你在投稿时确定:Informationaboutcolorfiguresasbeingintendedforprintedcolorreproductionortobeprintedinblack-and-white.2.你的图像是彩色的PDF,而且图像的尺寸与A4纸大小不一致.二、解决办法:1. 把你的彩色PDF通过虚拟打印......