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

【题解】CF1691F K-Set Tree

难度:\(3/10\)

比较无聊的题。先考虑一个比较暴力的做法。枚举根 \(R\),然后再枚举点集 \(S\) 的 LCA 所在位置 \(i\)。可以一遍 dfs 求出 \(siz_i\) 数组表示 \(i\) 点为根的子树,然后直接组合数统计答案。具体的,固定 \(R,i\) 后的答案为:

\[siz_i\left(\binom{siz_i}k-\sum\limits_{j\in\text{son}(i)}\binom{siz_j}k\right) \]

但是这样做时间复杂度过于爆炸,考虑逐步优化。枚举 \(R,i\) 后内层还有一个对所有子节点的求和,考虑将其拆出,即直接一次性单独统计完每个点对答案的贡献。那么可以发现 \(i\) 点的贡献可以分成两个部分:

  • 自己直接贡献的部分 \(siz_i\binom{siz_i}k\)
  • 被父亲结点减去贡献的部分 \(-siz_{\text{fa}(i)}\binom{siz_i}k\),其中 \(\text{fa}(i)\) 表示 \(i\) 点的父亲结点。

所以答案也可以被表示为(固定 \(R\)):

\[\sum\limits_{i=1}^n\binom{siz_i}k(siz_i-siz_{\text{fa(i)}}) \]

直接枚举 \(R\) 可以做到总时间复杂度 \(O(n^2)\) 求解,但是这样显然是不行的。容易想到换根 dp 来维护这个东西。先 \(O(n)\) 计算出 \(R=1\) 时的答案 \(res_1\),然后套路的从 \(1\) 结点开始 DFS 遍历整棵树,假设当前求出了 \(res_u\) 的值,然后现在枚举 \(u\) 的儿子结点 \(v\) 要求 \(res_v\) 的值,计算其相对于 \(res_u\) 的变化量。发现上面那个公式用到的量里面显然只有 \(siz\) 数组发生了变化。而考虑经典结论,根结点从 \(u\) 变为 \(v\) 只会修改 \(siz_u,siz_v\) 两个位置的值,因此直接对这两个位置分别讨论计算变化的量即可。

预处理阶乘和阶乘逆可以做到 \(O(n)\) 解决整个问题。

namespace Loyalty
{vector<int> adj[N];int fac[N], inv[N], ifac[N], n, k;inline void init(){for (int i = 0; i < 2; ++i)fac[i] = inv[i] = ifac[i] = 1;for (int i = 2; i < N; ++i){fac[i] = fac[i - 1] * i % mod;inv[i] = mod - inv[mod % i] * (mod / i) % mod;ifac[i] = ifac[i - 1] * inv[i] % mod;}}inline int binom(int a, int b){if (b < 0 || a < b)return 0;return fac[a] * ifac[b] % mod * ifac[a - b] % mod;}int presolve[N], siz[N], res[N], up[N];inline void dfs(int u, int fa){siz[u] = 1, up[u] = fa;for (int &v : adj[u])if (v != fa)dfs(v, u), siz[u] += siz[v];}inline void dfs2(int u, int fa){if (u != 1){int term1 = ((n - siz[u]) % mod) * binom(siz[u], k) % mod;                                       // (n-sz)*C(sz,k)int term2 = (siz[u] % mod) * binom(n - siz[u], k) % mod;                                         // sz*C(n-sz,k)int term3 = ((presolve[fa] - binom(siz[u], k) + mod) % mod) * (siz[u] % mod) % mod;              // (S_fa - C(sz))*szint term4 = ((presolve[u] - binom(n - siz[u], k) + mod) % mod) * ((n - siz[u]) % mod) % mod;     // (S_u - C(n-sz))*(n-sz)res[u] = (res[fa] + term1 - term2 + term3 - term4) % mod;if (res[u] < 0)res[u] += mod;}for (int &v : adj[u])if (v != fa)dfs2(v, u);}inline void main([[maybe_unused]] int _ca, [[maybe_unused]] int _atc){cin >> n >> k;for_each(adj + 1, adj + n + 1, [&](auto &edges) { edges.clear(); });for (int i = 1; i < n; ++i){int a, b;cin >> a >> b;adj[a].emplace_back(b);adj[b].emplace_back(a);}dfs(1, 0);for (int i = 1; i <= n; ++i)res[1] = (res[1] + (siz[i] - siz[up[i]]) * binom(siz[i], k) % mod) % mod;for (int i = 1; i <= n; ++i){presolve[i] = binom(n - siz[i], k);for (int &j : adj[i])if (j != up[i])presolve[i] = (presolve[i] + binom(siz[j], k)) % mod;}dfs2(1, 0);cout << (accumulate(res + 1, res + n + 1, 0ll) % mod + mod) % mod << '\n';}
}
http://www.jsqmd.com/news/326898/

相关文章:

  • OpenCV(二十六):高斯滤波 - 教程
  • 书匠策AI:教育论文的“数据炼金实验室”,让数字开口说黄金故事
  • 【学习笔记】图上和三元环有关的一类问题
  • 【学习笔记】强制在线 O(1) 逆元
  • 【学习笔记】Chirp-Z Transform
  • Vue 笔记2
  • 深圳腾讯外包项目组面试题记录
  • 基于留出法和k折交叉验证的多种神经网络分类预测MATLAB程序:代码中共包含人工神经网络(AN...
  • 系统软件领域中的BSS段
  • ue 模拟说话
  • 蚌埠本地生活代运营实测推荐:这4家专业服务商助力商家高效引流
  • 2026年真石漆厂家推荐:外墙漆真石漆、保温真石漆、白色真石漆、外墙仿石漆厂家推荐,赋能建筑外墙美观与防护
  • 【毕业设计】基于springboot+Hadoop平台的大学多媒体教学管理系统的设计与实现(源码+文档+远程调试,全bao定制等)
  • 过程性编程和面向对象编程
  • Java毕设项目推荐-基于Hadoop的大学多媒体教学管理系统基于springboot+Hadoop平台的大学多媒体教学管理系统的设计与实现【附源码+文档,调试定制服务】
  • 2026年输送机厂家推荐:污泥破碎机、皮带输送机、螺旋输送机、刮板输送机、链板输送机厂家推荐,从定制到运维的全流程方案
  • Java毕设选题推荐:基于Hadoop平台的大学多媒体教学管理系统基于springboot+Hadoop平台的大学多媒体教学管理系统的设计与实现【附源码、mysql、文档、调试+代码讲解+全bao等】
  • 2026年外墙翻新厂家推荐:别墅外墙翻新、厂房外墙翻新、高端外墙装饰厂家选择指南,老旧墙面改造实用方案
  • 2026 中小民企管理咨询公司推荐榜:战略目标/组织职责/薪酬职级/绩效考核/职业规划/绩效增长/ 人才招聘/销售管理/6S管理/商业模式咨询辅导,山东手把手领衔优选
  • 【课程设计/毕业设计】基于springboot+Hadoop平台的大学多媒体教学管理系统的设计与实现多媒体教学资源管理系统、数字化教学管理平台、智慧教室管理系统 【附源码、数据库、万字文档】
  • 计算机Java毕设实战-基于springboot+Hadoop平台的大学多媒体教学管理系统多媒体教学资源管理系统、数字化教学管理平台、智慧教室管【完整源码+LW+部署说明+演示视频,全bao一条龙等】
  • 从理论到实战:MIMO-OFDM 无线通信全套 MATLAB 源码,助你打通技术任督二脉
  • React Native for OpenHarmony:ScrollView 事件流、布局行为与性能优化深度剖析
  • Java毕设项目:基于springboot的宠物领养及健康管理系统(源码+文档,讲解、调试运行,定制等)
  • Java毕设项目:基于springboot+Hadoop平台的大学多媒体教学管理系统的设计与实现(源码+文档,讲解、调试运行,定制等)
  • Java计算机毕设之基于springboot+Hadoop平台的大学多媒体教学管理系统基于Hadoop平台的大学多媒体教学管理系统的设计与实现(完整前后端代码+说明文档+LW,调试定制等)
  • 【计算机毕业设计案例】基于SpringBoot的大学多媒体教学管理系统的设计与实现基于springboot+Hadoop平台的大学多媒体教学管理系统的设计与实现(程序+文档+讲解+定制)
  • 亳州本地生活团购代运营精选|三十六行网络科技领衔 4 家实力服务商
  • JuiceSSH让手机秒控 Linux 服务器,cpolar让你告别工位束缚!
  • Redis快速实现布隆过滤器:缓存去重的“智能门卫”