当前位置: 首页 > news >正文

题解:CF1914F Programming Competition

Description

给定一棵树,求不互为祖先的点对的最大个数。

Solution

考虑树形 DP。

\(dp_u\) 表示根节点为 \(u\) 的子树的答案。

分类讨论:
设根节点 \(u\) 的重儿子为 \(v\)

  • \(size_v \le \lfloor \frac{size_u - 1}{2}\rfloor\) 时。考虑一种构造使得答案最大:可以对这棵树计算 dfs 序,由同一棵子树内的 dfs 序连续,则可以构成若干段长度均不大于 \(\lfloor \frac{size_u - 1}{2}\rfloor\) 的序列。对于每一段序列里的任意节点,它的 dfs 序加上 \(\lfloor \frac{size_u - 1}{2}\rfloor\) 后的点一定与它不属于同一个序列。所以最大值为 \(\lfloor \frac{size_u - 1}{2}\rfloor\)

  • \(size_v > \lfloor \frac{size_u - 1}{2}\rfloor\) 时:让 \(v\) 以外的节点都和 \(v\) 内未配对的节点两两配对。答案即为 \(f_v + size_u - size_v - 1\)。但是, \(v\) 中的未配对的点不够与 \(v\) 外的点进行配对,这时需要将 \(v\) 中已配对的点拆开与外面的点进行配对。但是,这样可能算重,所以和上界 $$\lfloor \frac{size_u - 1}{2}\rfloor$$ 比较,取小者。

故得转移方程:

\[f_u=\left\{\begin{aligned} &\lfloor \frac{size_u - 1}{2}\rfloor & \quad \rm{if} \quad size_v \le \lfloor \frac{size_u - 1}{2}\rfloor \\ &\min(f_v + size_u - size_v - 1, \lfloor \frac{size_u - 1}{2}\rfloor) & \quad \rm{if} \quad size_v > \lfloor \frac{size_u - 1}{2}\rfloor\end{aligned}\right. \]

Code

#include <bits/stdc++.h>
using namespace std;int t, n, siz[(int)2e5 + 5], f[(int)2e5 + 5];
vector<int> vt[(int)2e5 + 5];void dfs(int u, int fa) {siz[u] = 1;int z = 0;for (int v : vt[u]) {if (v == fa)continue;dfs(v, u);siz[u] += siz[v];if (siz[v] > siz[z]) z = v;}if (siz[z] > (siz[u]-1) / 2) f[u] = min(f[z] + siz[u] - siz[z] - 1, (siz[u] - 1) / 2);else f[u] = (siz[u] - 1) / 2;
}int main() {ios::sync_with_stdio(false);cin.tie(0); cout.tie(0);cin >> t;while (t--) {cin >> n;memset(f, 0, sizeof(f));memset(siz, 0, sizeof(siz));for (int i = 1; i <= n; ++i)vt[i].clear();for (int i = 2; i <= n; ++i) {int p;cin >> p;vt[p].push_back(i);}dfs(1, 0);cout << f[1] << '\n';}return 0;
}

感谢 @zhengjingtian 的贡献!

http://www.rkmt.cn/news/24314.html

相关文章:

  • 使用云服务器搭建飞牛Frp 内网穿透服务
  • 2025-10-19
  • 2025 年防撞钢护栏生产厂家最新推荐排行榜:桥梁 / 不锈钢 / 复合管 / 景观 / 灯光 / 热镀锌等多类型护栏精选
  • 2025 年钢闸门厂家企业品牌推荐排行榜,四川不锈钢闸门,渠道钢闸门,河道钢闸门,水库钢闸门,平面钢闸门,手动钢闸门,电动钢闸门,液压钢闸门公司推荐
  • 概率DP
  • 2025年不锈钢酸洗钝化液厂家推荐排行榜,环保型不锈钢清洗钝化液,不锈钢管酸洗钝化处理公司推荐!
  • Say 题选记(10.12 - 10.18)
  • .NET Runtime 项目区域责任人与协作机制分析
  • 元推理框架,自指自洽,人工智能领域的杂交水稻
  • Docker 常用命令整理
  • 在AI技术唾手可得的时代,挖掘新需求成为制胜关键——某知名Linux软件资源库需求洞察
  • redis 异步读写,2.0改版后操作代码
  • 2025年棒球帽,卫衣,羽绒服厂家推荐排行榜,潮流设计与舒适体验的时尚之选!
  • 22-windows11-wsl-deepin-envoy-proxy-安装
  • uml九图
  • 2025年安恒信息公司深度解析:AI与数据安全双轮驱动的技术护城河
  • 统计单词(p1308)
  • 2025年安恒信息深度解析:AI与数据安全双轮驱动的技术跃迁
  • SpringCloud系列十三:Spring Cloud和Spring Cloud Alibaba有什么关系
  • 2025年10月美白精华推荐榜:OLAY水光小白瓶领衔对比评测
  • 2025年10月北京口腔医院推荐:对比评测榜助您高效择医
  • 2025年10月抗老精华产品推荐榜:十款热门单品对比评测与排名解析
  • 2025年10月留香沐浴露推荐:五强对比评测榜助你锁定24小时体香方案
  • 奶奶都能看懂的 C++ —— const 限定符与指针
  • 2025年10月深圳酒店综合对比与排行评测指南
  • 2025年10月连锁酒店品牌综合实力对比与投资价值排行分析
  • 2025年10月上海老房翻新公司客观对比与排名分析
  • 2025年10月北京治疗肺癌医生排行榜与专业能力深度评测
  • 2025年10月深圳婚姻纠纷律师综合对比与专业排行分析
  • 2025年10月上海离婚律师客观对比与实用排行分析