题解:AT_abc311_h [ABC311Ex] Many Illumination Plans

news/2025/9/30 20:23:40/文章来源:https://www.cnblogs.com/LUlululu1616/p/19121726

题意:给出一棵树,每个节点有权值,重量和颜色,问对于每个子树 \(u\),选出一个包含 \(u\) 的虚树,满足重量之和 \(\le X\),相邻两个点颜色不同且权值和最大。

做法:

首先我们会一个非常平凡的 \(O(nX^2)\) 做法,但是这样怎么找都需要一个没有任何性质的 \((max,+)\) 卷积,显然很完蛋,我们考虑为什么会这么慢,因为我们需要枚举节点重量的一个线性组合,所以导致会多个加入,这样很爆炸。

我们不妨先考虑一个更基础的问题,P2014。这个题的题意就是选节点必须选父亲,那么我们考虑这样一个 dp。\(dp_{i,j}\) 代表子树 \(i\),里面选了 \(j\) 个节点,但是这样不够,没有优化空间,我们考虑在做 dp 的时候将 dp 值直接传给儿子,再对自己进行贡献。但是为了保证父亲也选了,我们强制限定向下传的时候 \(1\rightarrow i\) 路径上的若干个点都必选,前面的贡献算过了,在下传的时候加上儿子的权即可,细节可以看代码。

考虑这样做的正确性,因为如果我们进入一个子树,我们就立刻算掉了贡献保证一定有,而保证了这样之后其实元素间就没有什么其他限制了。

代码:

#include <bits/stdc++.h>
using namespace std;
#define int long long
const int maxn = 305;
int dp[maxn][maxn], val[maxn], n, m, dep[maxn];
vector<int> e[maxn];
void dfs(int u) {for (int i = 0; i < e[u].size(); i++) {int v = e[u][i]; dep[v] = dep[u] + 1;for (int j = dep[u] + 1; j <= m; j++)dp[v][j] = dp[u][j - 1] + val[v];dfs(v);for (int j = dep[u] + 1; j <= m; j++)dp[u][j] = max(dp[u][j], dp[v][j]);}
}
signed main() {cin >> n >> m; m++;for (int x, i = 1; i <= n; i++)cin >> x >> val[i], e[x].push_back(i);dep[0] = 1;dfs(0);cout << dp[0][m] << endl;return 0;
}

然后我们考虑对这个题也施加这个 trick,那么先考虑暴力怎么做,\(dp_{u,0/1,i}\) 代表 \(u\) 子树内最上层的颜色为 \(0/1\),重量为 \(i\),最大的权值之和。如果没有颜色直接秒了,考虑有颜色怎么办。

我们如果直接下传,那么会出现一个问题,可能我们会在子树 \(v\) 中从 \(dp_{u,0}\) 转移来一个 \(1\) 颜色的点,\(w\) 子树中又有一个 \(0\) 颜色的,这样就出问题了。

这里有一步天才的想法,我们直接下传 \(dp_{v,0} = dp_{v,1}=dp_{u,0}\),再下传 \(dp_{v,0} = dp_{v,1}=dp_{u,1}\),然后前者只取 \(dp_{v,0}\),后者只取 \(dp_{v,1}\),分讨一下下面的情况发现确实是可以覆盖所有情况的!

但是问题来了,这样的复杂度是 \(\sum 2^{dep}\) 的,那么既然是深度相关,那么完全可以用重链剖分优化一下,启发式一下,直接继承重儿子然后再对于其他的考虑。

分析复杂度,\(T(n) = T(a_1)+2\sum T(a_i)+O(X)\),那么我们应该让后面的 \(\times 2\) 的部分尽量大,那么就让子树间平均,那么就是 \(T(n) = (2k-1)T(\frac{n}{k})+O(X)\),由主定理得到复杂度为 \(O(n^{\log_{k}2k-1}X)\)\(k=2\) 时取到最大,为 \(O(n^{1.59}X)\)

代码:

#include <bits/stdc++.h>
using namespace std;
#define int long long
const int maxn = 205, inf = 9e18; 
int n, x, p[maxn], v[maxn], w[maxn], c[maxn], sz[maxn], son[maxn];
vector<int> e[maxn];
void dfs1(int u, int fa) {sz[u] = 1;for (int i = 0; i < e[u].size(); i++) {int v = e[u][i];dfs1(v, u), sz[u] += sz[v];if(sz[son[u]] < sz[v])son[u] = v;}	
}
int ans[maxn];
pair<vector<int>, vector<int> > dfs(int u, vector<int> dp, bool use) {if(use) {for (int i = 0; i < e[u].size(); i++) {int v = e[u][i];if(v == son[u])continue;dfs(v, dp, use);}}vector<int> f[2];if(son[u]) {pair<vector<int>, vector<int> > p = dfs(son[u], dp, use);f[0] = p.first, f[1] = p.second;for (int i = 0; i < e[u].size(); i++) {int v = e[u][i];if(v == son[u])continue;f[0] = dfs(v, f[0], 0).first;f[1] = dfs(v, f[1], 0).second;}}elsef[0] = f[1] = dp;if(use) {for (int i = x; i >= w[u]; i--) ans[u] = max(ans[u], f[c[u] ^ 1][i - w[u]] + v[u]);}for (int i = x; i >= w[u]; i--) f[c[u]][i] = max(f[c[u]][i], f[c[u] ^ 1][i - w[u]] + v[u]);return make_pair(f[0], f[1]);
}
signed main() {cin >> n >> x;for (int i = 2; i <= n; i++)cin >> p[i], e[p[i]].push_back(i);dfs1(1, 0);for (int i = 1; i <= n; i++)cin >> v[i] >> w[i] >> c[i];vector<int> v; v.resize(x + 1);for (int i = 1; i <= x; i++)v[i] = -inf;dfs(1, v, 1);for (int i = 1; i <= n; i++)cout << ans[i] << endl;return 0;
}

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

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

怎么在阿里云服务器上建设网站网站数据模版

知识导航&#xff08;就问全不全&#xff09; 当学习 Vue.js 时&#xff0c;除了基本的 HTML、CSS 和 JavaScript 知识外&#xff0c;还有一些其他的技术和语法需要了解&#xff0c;例如 ES6 和 TypeScript。以下是您可能需要学习的一些基础知识和对应的学习资源&#xff0c;我…

上海网站设计图片新建网址

没有使用Windows经典风格的QTreeView或QTreeWidget显示如下&#xff1a; 使用Windows经典风格的QTreeView或QTreeWidget显示如下&#xff1a; 树展开时&#xff1a; 树未展开时&#xff1a; 可以看到&#xff1a; 未使用Windows经典风格时&#xff0c;QTreeView或QTreeWidget…

南阳网站建设aokuo做图网站有哪些

随着人工智能的迅猛发展&#xff0c;ChatGPT作为一种强大的自然语言处理模型&#xff0c;逐渐在学术界引起了广泛的关注。本文将探讨ChatGPT在学术写作中的应用&#xff0c;并分享使用ChatGPT进行学术写作时的一些经验和心得。 01 — ChatGPT在学术写作中的应用 1.文献综述和…

淮南移动网站建设深圳网站推广优化

区域代理的保护机制&#xff1a;在链动商城系统里设定的代理有唯一性&#xff0c;每个省只有一个省代&#xff0c;每个市只有一个市代&#xff0c;每个区县只有一个区县代。这样也是保护每个代理的收益权益。 区域代理包含的权益类别&#xff1a;购物奖励折扣&#xff1b;区域实…

品牌网站建设哪里有维影企业网站管理系统

基于springboot实现酒店客房管理平台系统演示 摘 要 随着人们的物质水平的提高&#xff0c;旅游业和酒店业发展的速度越来越快。近年来&#xff0c;市面上酒店的数量和规模都在不断增加&#xff0c;如何提高酒店的管理效率和服务质量成为了一个重要的问题。伴随着信息技术的发…

易语言如何做网站钦州建设网站

题目 给定长为n(n<2e5)的1-n的排列p&#xff0c; 求(i,j)(1<i<j<n)对的数量&#xff0c;满足gcd(i,j)≠1且gcd(pi,pj)≠1 思路来源 官方题解 题解 参考莫比乌斯函数mu&#xff0c;定义一个新函数&#xff0c; 新函数需要满足n1的时候对因子求和为0&#xff0…

现在流行的网站开发中关村在线

简介&#xff1a; 针对数据库连接池到DRDS连接探活的优化 1. 问题背景 近期在给某专有云客户进⾏云产品应⽤性能优化分析时&#xff0c;发现了⼀个有趣的关于DRDS使⽤层⾯的问题&#xff0c;这⾥给⼤家分享⼀下。 使⽤过DRDS产品的同学都知道在DRDS中&#xff0c;未分库分表的…

2025-9-27 提高组模拟赛 div2

比赛链接模拟赛 订正赛

idea 网站开发网站页面设计制作费

随着世界技术的迭代与发展&#xff0c;人工智能和机器学习正在超自动化领域&#xff0c;扮演着越来越重要的角色。2020年的冠状病毒疫情突发&#xff0c;整个世界都在防疫的道路上披荆斩棘。人工智能发挥了重大作用&#xff0c;智能测温、智能消毒、智能建设都能看到AI的影子。…

植物大战僵尸融合版下载安装教程【PC/安卓/iOS 完整攻略 + 常见问题解决】 - 详解

植物大战僵尸融合版下载安装教程【PC/安卓/iOS 完整攻略 + 常见问题解决】 - 详解pre { white-space: pre !important; word-wrap: normal !important; overflow-x: auto !important; display: block !important; font…

合同范本的网站深圳戈麦斯网站开发

P3714 [BJOI2017]树的难题 求解树上长度在L到R的树链中颜色段权值和最大的链。 首先求解树上链的问题&#xff0c;而且限制了链的长度&#xff0c;那么我们需要点分治处理&#xff0c;然后考虑每次分治&#xff0c;我们可以把链分成两类&#xff0c;先处理同色连通块&#xf…

icp备案综合查询网站qq是哪家公司开发的软件

简介&#xff1a;Apache ECharts 是一款基于 Javascript 的数据可视化图表库&#xff0c;提供直观&#xff0c;生动&#xff0c;可交互&#xff0c;可个性化定制的数据可视化图表。 1、介绍 图 1.1 Apache ECharts 功能、运行环境 功能&#xff1a; ECharts&#xff…

两场div3 逆向思维

两场div3 逆向思维Posted on 2025-09-30 19:46 tttfred 阅读(0) 评论(0) 收藏 举报927div3 C 给你一个数列,和一个只含LR的操作序列s,若当前是L移除左端一个元素,若当前是R移除右端一个元素,问你每次所有元素…

详细介绍:(基于江协科技)51单片机入门:5.定时器

pre { white-space: pre !important; word-wrap: normal !important; overflow-x: auto !important; display: block !important; font-family: "Consolas", "Monaco", "Courier New", …

part2

T1很明显需要将 \(N\) 分解成 \(N = p_i ^ {Q_i}\)再很明显的是假如我们选了若干元素则满足条件的唯一性质为 \(\min(Q_{j,k}) = 0\) 且 \(\max(Q_{j,k}) = Q_k\) 最关键的也是这步容斥,我们用总数减去T2

SuperMap iObjects .NET 11i 二次开发(十五)—— 类型转换之面转点 - 教程

pre { white-space: pre !important; word-wrap: normal !important; overflow-x: auto !important; display: block !important; font-family: "Consolas", "Monaco", "Courier New", …

网站服务器空间价格网站开发顶岗周记

打开vs2010 在工具选项中选择扩展管理器——联机库 安装WCF REST Service Template 40(CS)模板 安装后新建wcf服务应用程序&#xff0c;删除默认建立的文件。 新建RestWcf4HelpPage.svc&#xff0c;代码如下 using System; using System.Collections.Generic; using System.Lin…

Controversial Rounds

题目大意 给定一个字符串,只包含 0,1,?,三种字符,其中 ? 可以为 \(0\) 和 \(1\) 种的任意一个数。 对于一个 \(x(1 \le x \le n)\),要求出最多有多少个没有交集的字串,使得每个字串里只有 \(0\) 或 \(1\),并…

Transformer实战(20)——微调Transformer语言模型进行问答任务 - 实践

Transformer实战(20)——微调Transformer语言模型进行问答任务 - 实践2025-09-30 19:43 tlnshuju 阅读(0) 评论(0) 收藏 举报pre { white-space: pre !important; word-wrap: normal !important; overflow-x: au…

题解:B4410 [GESP202509 一级] 金字塔

题解:B4410 [GESP202509 一级] 金字塔 题目传送门 题意 给定正整数 \(n\),求从 \(1\) 到 \(n\) 的立方和(\(\sum \limits _{i=1} ^{n} i^2\)) 数据规模与约定 \(1 \le n \le 50\) 算法 tag 模拟(循环结构),数学…