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

【动态规划】树上连通块计数

7.4.5.3.树上连通块计数

7.4.5.3.1.树上连通块计数

\(\sum\limits_{\mathbb{V}}1\)

类似于树上点对贡献。

在连通块中深度最小的点处进行统计。

下面简记“连通块中深度最小的点是点u的连通块”为“以点u为根的连通块”。

\(f_u\):当前已统计的以点u为根的连通块的个数。

转移:在遍历到点u的一个儿子点v时,情况分为删除边(u,v)和不删除边(u,v),\(f_u=f_u*1+f_u*f_v\)

边界:\(f_u=1\)。其他为0。

\(ANS=\sum\limits_uf_u\)

补充:另一种dp设计:\(f_{u,d}\):考虑了以u为根的子树,当前u所在连通块的根的深度为d,……。

7.4.5.3.2.树上连通块贡献

\(\sum\limits_{\mathbb{V}}w(\mathbb{V})\)

类似于《7.4.5.3.1.树上连通块计数》。

所有连通块大小的乘积=在每个连通块内恰好选一个点的方案数。dp多开一维0/1表示当前连通块有/无选关键点。

7.4.5.3.3.树上连通块内点贡献

\(\sum\limits_{\mathbb{V}}\sum\limits_{u\in\mathbb{V}}a_u\)

\(f_u\):当前已统计的以点u为根的连通块的个数。

\(g_u\):当前已统计的以点u为根的连通块内的点的贡献。

转移:在遍历到点u的一个儿子点v时,情况分为删除边(u,v)和不删除边(u,v),

  1. \(g_u=g_u*1+(g_u*f_v+g_v*f_u)\)
  2. \(f_u=f_u*1+f_u*f_v\)

边界:\(f_u=1,g_u=a_u\)。其他为0。

\(ANS=\sum\limits_ug_u\)

7.4.5.3.4.树上连通块内点对贡献

\(\sum\limits_{\mathbb{V}}\sum\limits_{u,v\in\mathbb{V}}(a_u\oplus a_v)\),其中⊕满足对加法的分配律。

异或:拆位,转化为1的个数与0的个数的乘积,即可满足对加法的分配律。

结合《7.4.5.1.树上点对贡献》和《7.4.5.3.3.树上连通块内点贡献》。点对仍在点对的lca处进行统计,借助树上连通块的转移将点对贡献到其所属的所有连通块。

\(f_u\):当前已统计的以点u为根的连通块的个数。

\(g_u\):当前已统计的以点u为根的连通块内的点的贡献。

\(h_u\):当前已统计的以点u为根的连通块内的点对的贡献。

转移:在遍历到点u的一个儿子点v时,情况分为删除边(u,v)和不删除边(u,v),

  1. \(h_u=h_u*1+(h_u*f_v+h_v*f_u+g_u\oplus g_v)\)

    当不删除边(u,v)时,统计到含点u和点v的连通块,情况分为点对都在当前以点u为根的连通块(\(h_u*f_v\))、点对都在以点v为根的连通块(\(h_v*f_u\))和点对分别在当前以点u为根的连通块和以点v为根的连通块(\(g_u\oplus g_v\))。

  2. \(g_u=g_u*1+(g_u*f_v+g_v*f_u)\)

  3. \(f_u=f_u*1+f_u*f_v\)

边界:\(f_u=1,g_u=a_u,h_u=0\)。其他为0。

\(ANS=\sum\limits_uh_u\)

在dp中,(i,j)与(j,i)视为相同,不会重复计算。根据题意(i,j)与(j,i)是否算不同的贡献,判断最终答案是否要乘2。

7.4.5.3.5.树上连通块内点对贡献和合并子树信息模型

\(\sum\limits_{cnt_\mathbb{V}(\mathbb{G})=m+1}\sum\limits_{\mathbb{V}\in\mathbb{G}}\sum\limits_{u,v\in\mathbb{V}}(a_u\oplus a_v)\),其中⊕满足对加法的分配律。

\(f_{u,j}\):在以点u为根的子树内,当前已删除了j条边,已统计的以点u为根的连通块的个数。

\(g_{u,j}\):在以点u为根的子树内,当前已删除了j条边,已统计的以点u为根的连通块内的点的贡献。

\(h_{u,j}\):在以点u为根的子树内,当前已删除了j条边,已统计的所有连通块内的点对的贡献。

\(bf_j,bg_j,bh_j\)\(f_{u,j},g_{u,j},h_{u,j}\)的备份数组。备份后\(f_{u,j},g_{u,j},h_{u,j}\)清零。

转移:在遍历到点u的一个儿子点v时,

  • 删除边(u,v),
    • \(h_{u,j+k+1}←bh_j*f_{v,k}+h_{v,k}*bf_j\)
    • \(g_{u,j+k+1}←bg_j*f_{v,k}\)
    • \(f_{u,j+k+1}←bf_j*f_{v,k}\)
  • 不删除边(u,v),
    • $h_{u,j+k}←bh_j*f_{v,k}+h_{v,k}*bf_j+bg_j\oplus g_{v,k} $。
    • \(g_{u,j+k}←bg_j*f_{v,k}+g_{v,k}*bf_j\)
    • \(f_{u,j+k}←bf_j*f_{v,k}\)

边界:\(f_{u,0}=1,g_{u,0}=a_u,h_{u,0}=0\)。其他为0。

\(ANS=h_{1,m}\)

在dp中,(i,j)与(j,i)视为相同,不会重复计算。根据题意(i,j)与(j,i)是否算不同的贡献,判断最终答案是否要乘2。

http://www.wuyegushi.com/news/657.html

相关文章:

  • Windows自带神器Robocopy一键备份文件文件夹,断点续传+多线程效率翻倍!.250429
  • 7月27日
  • 第八周作业
  • ASP.NET Core MVC 文件上传、文件扩展验证注解实现、文件扩展验证
  • 政治学和行政学属于法学
  • 基于RK3399嵌入式Linux驱动开发课程
  • Java日志框架
  • ASP.NET Core MVC 使用 EF Core 实现字段自动填充(如:添加时间 CreatedTime、更新时间 UpdatedTime)
  • 山西大同旅游攻略
  • 7月27日总结
  • 线性回归算法
  • 什么?智能体生成智能体?自我进化? - 戴维
  • 使用 Claude Code 的自定义 Sub Agent 完善博文写作体验
  • MCP 如何将你的 AI 从聊天机器人转变为工作流自动化利器
  • uart回环验证
  • POLIR-Laws-民法典:委托合同、行纪合同 和 中介合同 等的区别
  • MongoDB 安全数据替换脚本 (执行顺序:备份→校验→确认→清空→还原指定数据→失败回滚到备份)
  • 望言OCR视频字幕提取2025终极评测:免费版VS专业版提全方位对比(含免费下载
  • ASP.NET Core MVC 使用 X.PagedList.EF 实现分页、条件查询
  • 探索C++世界的奥秘:从核心特性到高效开发实践
  • 我的开源项目-PandaCoder迎来史诗级大更新啦
  • mongoDB 数据库的备份导出
  • 我在Android应用中发现硬编码的Facebook和Google API密钥(以及为什么这是个坏主意)
  • img convert
  • PPT_1 Word 内容 转 PPT
  • ACCESS 导出附件
  • 第二周假期进度报告(7.20 - 7.26)
  • CVE-2020-11981 Apache Airflow Celery 消息中间件命令执行漏洞 (复现)
  • nlogn分解质因数 - SPF(目前以学习最快分解质因数)
  • 在express中使用sqlite数据库的方法