当前位置: 首页 > 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.rkmt.cn/news/183157.html

相关文章:

  • PyTorch开发者必看:Miniconda-Python3.10提升环境配置效率50%
  • 【深度学习新浪潮】什么是AI原生云计算?
  • PHP 包含
  • 洛谷 P3674
  • 【毕业设计】基于SpringBoot的高校校园网故障管理系统(源码+文档+远程调试,全bao定制等)
  • 基于TMS320F28335 DSP的单相并网逆变器
  • 掌握大数据领域Elasticsearch的监控与维护技巧
  • 提供一键部署脚本减少用户初始使用阻力
  • 【课程设计/毕业设计】基于SpringBoot的高校校园网故障管理系统故障报修 - 派单处理 - 进度跟踪 - 总结分析【附源码、数据库、万字文档】
  • VMware Workstation 12虚拟机软件实战指南
  • 11 - 数据抽取 - lxml 解析库
  • 定期举办线上Workshop教学如何高效使用平台
  • macOS Xcode C++程序设置相对路径根目录
  • Miniconda-Python3.10镜像助力高校AI教学实验平台建设
  • 2,prometheus node_export及服务端配置文件
  • 12 - 数据抽取 - parsel解析库
  • Lua 调试(Debug)
  • 家长们都应该了解这些知识,保护孩子视力太重要了
  • Math - 中心化,标准化和归一化
  • 西安交大突破:视觉语言模型功能词忽略提升鲁棒性
  • 利用RSS订阅扩大技术内容影响力范围
  • 写一个简单的Linux驱动程序
  • Elasticsearch 与 PostgreSQL 集成:关系型数据库的搜索增强
  • 2025最新云南节能评估报告服务品牌top5榜单公布,服务覆盖昆明/曲靖/文山/保山/昭通等地优质公司专业评测及选择指南,权威榜单助力企业项目高效合规 - 全局中转站
  • 设置系列专栏:如‘30天掌握AI开发环境搭建’
  • 华为OD机试 - 文件存储系统的排序 - 深度优先搜索dfs(Java 双机位C卷 200分)
  • Adams中机械系统动态质心实时显示与质心轨迹导出
  • Docker run命令启动Miniconda-Python3.10运行PyTorch示例
  • SSH远程访问Miniconda-Python3.10容器进行模型训练
  • 利用GitHub托管代码示例增强技术文章可信度