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

20251227 - 点双 割点 割边 总结

比赛链接:https://vjudge.net/contest/777735#problem/A。

割点

介绍

如果从无向图中删去一个点之后,图里的连通分量的数量增加了,那么删去的这个点就被称之为割点

暴力做法,考虑依次删除每个点,再去数连通分量的个数,判断是否为割点,那么时间复杂度就是 \(O(nm)\) 的,太慢了。一般都是用 Tarjan 做到 \(O(n+m)\) 找割点的。

做法

Tarjan 时,会在 DFS 的过程中维护 \(dfn\)\(low\) 两个信息,其中 \(low_u\) 是指从 \(u\) 出发且最多用反祖边向上走一步的情况下能到达的最小的时间戳。

如果一个点 \(u\),有子节点 \(v\) 不能回到比 \(u\) 更高的节点,那么 \(u\) 就是割点。因为删掉 \(u\) 之后,\(v\) 所在的子树没有反祖边可以连回来,那么图的连通分量数量就会增多,那么 \(u\) 就是割点咯。

我们可以用 \(low\)\(dfn\) 两个数组快速判断是否能连回来,如果 \(low_v \ge dfn_u\) 就代表 \(v\) 这个子节点连不上去了。

这个判断法则只在非根节点时成立。

根节点需要特殊处理。如果根节点在 DFS 树上有两个或更多子节点,根节点是割点,否则如果只有一个子节点就不是割点。证明过于显然所以不写了。

实现

我在代码中用 \(id\) 表示上文中提到的 \(dfn\)

void DFS(int u,int fa){id[u]=(++tot),low[u]=id[u];int cnt=0;for(int v:g[u]){if(v==fa)continue;if(id[v])low[u]=min(low[u],id[v]);else{DFS(v,u),cnt++;low[u]=min(low[u],low[v]);if(fa&&low[v]>=id[u])cut[u]=1;}}if(!fa&&cnt>1)cut[u]=1;return;
}
http://www.jsqmd.com/news/167506/

相关文章:

  • 构建内容矩阵:覆盖‘anaconda’, ‘pytorch’, ‘cuda’三大主题
  • PostgreSQL 索引
  • 2025年AI冲击下的Java Web开发现状
  • PyTorch开发者必看:Miniconda-Python3.10提升环境配置效率50%
  • 【深度学习新浪潮】什么是AI原生云计算?
  • PHP 包含
  • 洛谷 P3674
  • 集成账单系统让用户清楚了解Token消耗情况
  • 【毕业设计】基于SpringBoot的高校校园网故障管理系统(源码+文档+远程调试,全bao定制等)
  • 2025最新云南社会稳定风险评估报告品牌top5榜单公布,服务覆盖昆明/曲靖/文山/保山/昭通等地优质公司专业评测及选择指南,助力项目顺利推进 - 全局中转站
  • 图片ALT属性填写描述性文字利于图像搜索引流
  • 基于TMS320F28335 DSP的单相并网逆变器
  • 掌握大数据领域Elasticsearch的监控与维护技巧
  • 使用Jupyter Lab连接远程Miniconda-Python3.10内核
  • 刘洋洋《清风踏云行》上线,演绎侠义风骨唱响赤子心
  • 鸿鹄CAD-让CAD制图改图更流畅高效
  • 通过撰写PyTorch安装教程为GPU算力销售引流
  • NPC五电平逆变器。 并网逆变器PQ控制。 通过功率闭环控制,实现并网单位功率因数,即并网电流...
  • C++ 函数
  • 提供一键部署脚本减少用户初始使用阻力
  • JMeter 实战:JSON 提取器结果双引号转义处理
  • 使用高相关关键词提升Miniconda技术文章搜索权重
  • PyTorch安装教程:使用Miniconda避免依赖地狱
  • 【课程设计/毕业设计】基于SpringBoot的高校校园网故障管理系统故障报修 - 派单处理 - 进度跟踪 - 总结分析【附源码、数据库、万字文档】
  • 结合‘pyenv linux’场景讲解Python版本管理最佳方案
  • VMware Workstation 12虚拟机软件实战指南
  • Miniconda创建环境时遇到‘ UnsatisfiableError’怎么办?
  • 使用清华镜像源加速Miniconda-Python3.10的包安装速度
  • 为大模型训练优化的Miniconda-Python3.10环境配置方案
  • 巴菲特对公司治理的重视与分析