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

08.21总结

圆方树

引入

我们注意到,树结构相比普通图具有诸多优良特性。若能将在无向图上求解的问题转化为树结构问题,往往能大幅简化求解过程。圆方树正是实现这一转化的有效工具。

定义

我们称原图中的点为"圆点"。通过引入方点并调整边的关系,可以构造出一棵树。通过合理赋权,使这棵树能够保持原图的某些特性,从而将原问题转化为树上的问题。具体构建过程如下:对于每个点双连通分量,首先删除其中所有圆点之间的直接连接边。然后为该点双新增一个方点,并将该点双内的所有圆点都与这个方点相连。这样构建出的图是一个无环的连通图,即所谓的圆方树。构建过程本身并不复杂,只要掌握点双连通分量的求法即可完成。而难点在于:如何恰当设置权值,使得在圆方树上能够求解原问题。

代码

void tarjan(int u, int fa) {low[u] = dfn[u] = ++tot;sta.push(u);for (auto v : ve[u]) {if (v == fa) continue;if (!dfn[v]) {tarjan(v, u);low[u] = min(low[u], low[v]);if (low[v] >= dfn[u]) {      // 发现点双int now = 0;sid++;    // 方点id,初始值为nvn[u].push_back(sid);    //建双向边vn[sid].push_back(u);while (now != v) {now = sta.top();vn[now].push_back(sid);    //建双向边vn[sid].push_back(now);sta.pop();}}} else {low[u] = min(low[u], dfn[v]);}}
}

例题

铁人两项
给定一张无向图,问有多少互不相同三元组<aaa, bbb, ccc>
使得存在一条从 aaabbb 经过 ccc 的简单路径。

题解

在同一个点双连通分量中,任意两点之间的所有简单路径的并集恰好构成该点双。对于任意两点,其简单路径所经过的点集可表示为路径上各点双的并集。在圆方树模型中,该点集对应为: 两个圆点路径上的所有圆点和路径上方点相邻的所有圆点 。由于限制条件 c≠ac ≠ ac=ac≠bc ≠ bc=b,最终答案为该点集大小减 2。 具体实现时,考虑圆方树上的权值设计: 将方点权值设为相邻圆点数量,并将圆点权值设为 -1(避免相邻方点重复计算),而路径端点不计入贡献。这样,圆方树上两圆点间路径的点权和即为所求答案。问题转化为统计树上所有圆点对的路径权值和,可通过树形 DP 计算每个点的贡献(点权 ×\times× 经过该点的路径数)来高效求解。

http://www.dtcms.com/a/344747.html

相关文章:

  • 【yocto】BitBake指令汇总解析
  • 基于springboot的农产品社区配送系统
  • 线性回归的学习
  • C++ unistd.h库文件介绍(文件与目录操作, 进程管理, 系统环境访问, 底层I/O操作, 系统休眠/执行控制)
  • golang 非error错误分类
  • 【如何生成专业级 API 接口文档:从规范到实战】
  • 指针实现数组的逆序存放并输出
  • IKE 与 ISAKMP 核心笔记
  • JCTools Spmc 单生产者-多消费者的无锁并发有界队列
  • 支持轻量化部署的混元3D世界模型Lite版本上线魔乐社区,昇腾部署实践来啦
  • FCT/ATE/ICT通用测试上位机软件
  • Leetcode—595. 大的国家【简单】
  • JUC之Fork/Join
  • WindowsAPI|每天了解几个winAPI接口之网络配置相关文档Iphlpapi.h详细分析9
  • 2-3.Python 编码基础 - 类型检测与类型转换
  • Vue 实现可拖拽分割布局(支持左右、上下拖拽调整)
  • Java 学习笔记(基础篇7)
  • 2025年游戏盾SDK动态加密技术全景解析:从防御破解到重塑游戏安全基石
  • CSM5110 5V/1A降压芯片 SOT23-5封装 可替代RY3408 带OVP保护
  • vim的使用
  • 牛客面经1 滴滴社招-002
  • JAVA国际版多商户运营版商城系统源码多商户社交电商系统源码支持Android+IOS+H5
  • 哈希和字符串哈希
  • STM32 外设驱动模块七:红外反射式光电模块
  • Centos 8 管理防火墙
  • 安装Tailscale
  • Maven初识到应用
  • 【AI应用】向量数据库Milvus详细命令
  • Jenkins + SonarQube 从原理到实战四:Jenkins 与 Gerrit 集成并实现自动任务
  • Linux爆音问题解决方法(隔一会会有奇怪噪音)