无向图添加最少边使得图边双连通

2023-05-16

题意:
给定一个无向连通图,问最少要添加多少条边,可以使得这个图是边双连通的。

题解:

t a r j a n tarjan tarjan缩点后图变成树,首先特判树中点数 n ≤ 2 n\leq 2 n2的情况。
考虑 n > 2 n>2 n>2的情况,以任意一个度大于1的点为根,叶子个数为 g g g ,答案为 ⌊ g + 1 2 ⌋ \lfloor \frac{g+1}{2} \rfloor 2g+1

构造具体方案时,以任意度大于 1 1 1的点为根,只需要保证任意两个叶子连边后与根成环,
当奇数个叶子时,可以将一个叶子与根相连,又转换成了偶数叶子情况。

具体构造:
t a r j a n tarjan tarjan缩点后图变成树,选择度大于 1 1 1的点为根,按照 d f s dfs dfs序存下所有叶子, l e a f [ i ] leaf[i] leaf[i]表示 d f s dfs dfs序的第 i i i个叶子,共 g g g个叶子。将 l e a f [ i ] leaf[i] leaf[i] l e a f [ i + ⌊ g 2 ⌋ ] leaf[i+\lfloor \frac{g}{2}\rfloor] leaf[i+2g⌋]连边, ( i ≤ ⌊ g + 1 2 ⌋ ) (i\leq\lfloor \frac{g+1}{2}\rfloor) (i2g+1⌋)

其实我并没有太理解这个做法的证明,如果有大佬明白可以在评论区解答下~

例题:
2020牛客多校第三场 C C C
含有官方题解的博客

upadte:
最近又看了眼这题,简单说下对于这个做法的理解。
首先,这个问题的思路在于使得所有的叶子与根成环,最坏的情况就是每个叶子与根都连一条边。

我们思考什么情况下可以使得这个环的数量变少?

对于奇数个叶子,可以让一个叶子与根连边,问题又转换为了偶数个叶子(选择哪个叶子与根连取决于下面的构造方案,剩下一个没有连边的叶子就是与根直接连边的)。

由于根可以到达每个叶子,考虑叶子之间是否可以连边。

设根为 root ,叶子1为 u ,叶子2为 v
如果 root->uroot->v 两条路径上没有重边,则加上一条边 u-v ,构成了一个环,那么 root, u, v 在的这条环必然是边双连通的。

一个直观的思路是:如果两个叶子处于根的不同子树中,那么这两个叶子就可以连条边。
这种情况下,根到两个叶子的路径是无重边的。

但是对于这种情况呢?
请添加图片描述

不管怎么样,2 的子树中只有一个叶子与 7 相连,2 的子树中另外两个叶子相连后,其中的点可以借助与 7 相连的叶子构成的环,到达树上其他任何点。

请添加图片描述
对于 4 和 6 两个叶子来说,虽然未和根成环,但是可以通过走到 5 ,去走 5 所在的环来间接与 根成环。

所以我们可以统计根的每个子树下的点的数量。

假设第 i i i 个子树下的点的叶子的值为 i i i ,目标是使得有尽可能多的数对,数对中的两个数尽可能不同。配对结束后,最多剩下一种数没有配对完。其内部配对一下即可。

但是这里假设是 1 2 3 3 呢,1 和 2 配对,3 和 3配对,这会导致子树 3 任意一个叶子都不能与根成环,所以目标在于使得任意一个子树中都有至少一个点和其他子树中的点相连。当然,如果是 1 2 3 这种情况,1 和 2 配对,子树 3 未与根成环,那么直接将其与根连边即可。

总结来说:有 n 个不同的子树,那么先将 1 和 2 配对,3 和 4 配对,5 和 6 配对…,如果 n 为奇数,最多剩下一个 n 未与其他数配对,如果 1,2,3,…,n-1不止一个,则 n 可以与其中一个数配对,否则 n 直接与根相连。剩下的数随意连即可。

对于构造方案:假设序列为:a = [1, 1, 2, 2, 3, 3, 4]
a[1] 与 a[1 + 7/2] = a[4]
a[2] 与 a[2 + 7/2] = a[5]
a[3] 与 a[3 + 7/2] = a[6]
a[4] 与 a[4 + 7/2] = a[7]

如果说这其中任意两个数都相同,说明这个树的根只有一个子树,这与我们要求的根至少度为 2 矛盾。

否则对于一种数来说,按这种方式必然会和其他种数配对一次。

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

无向图添加最少边使得图边双连通 的相关文章

  • linux学习3 — ubuntu中的文件

    目录 1 ubuntu都有哪些系统文件 2 linux文件类型 amp 访问权限 2 1 linux的文件类型 2 2 linux文件的访问权限 3 linux中的文件路径 3 1 绝对路径 3 2 相对路径 4 linux中文件的基本操作
  • Fatal Python error: initfsencoding: unable to load the file system codec问题的解决

    因为项目需要最近在搞c 43 43 配置相关的东西 xff0c 我自己电脑常用的系统是Ubuntu xff0c 在做之前检查了下win环境 xff0c 我的电脑果真没让我失望啊 xff0c 真的是做一件事要踩完所有的坑才肯罢休 xff01
  • c++嵌入python

    环境 xff1a win10 Visual studio 2017 python3 6 5 重点 xff1a 知道自己python的安装路径python安装路径中找到libs目录 xff0c 复制libs目录下python36 lib xf
  • 目标检测中IOU GIOU DIOU CIOU的理解

    IOU论文 xff1a link GIOU论文 xff1a link DIOU论文 xff1a link CIOU论文 xff1a link 原始的IOU存在以下问题 xff1a 一般的二阶段网络边框回归IOU 0 5 xff0c 不会对框
  • kindle 新手入门

    点我进入原文 其他一些kindle 的资源 xff1a 1 电子书 xff0c 很全 http www kindlepush com main 2 漫画 xff1a http www pixvol com 3 kindle 推送 xff1a
  • vscode+darknet_ros+单步调试

    开发环境 ubuntu 20 04 vscode rtx2080ti 怎么配置看之前的文章 darknet ros环境 2 1 下载 span class token function mkdir span p darknet ros yo
  • 编译带cuda的opencv4.5.5(4.2.0+cuda11.1+cudnn8.0.5未成功)

    活了这么大也没中过奖 xff0c 也没中过超过20块钱的彩票 xff0c 居然在这个地方中奖了 xff0c 很犀利 xff01 xff01 最终换成4 5 5版本的成功了 cmake的内容 cmake span class token op
  • ubuntu搭建 自动驾驶单目3d检测smoke 环境

    论文 xff1a SMOKE xff1a Single Stage Monocular 3D Object Detection via Keypoint Estimation 论文链接 源码 操作系统 xff1a ubuntu18 04 显
  • vs2019修改编码方式为UTF-8的方法

    原因 git上下载的项目编码有问题 xff0c 不识别中文或者编码不是utf 8 xff0c 之前其实也遇到过 xff0c 处理完了就忘记了 xff0c 又遇到这种糟心的事情了 xff0c 就顺手记录下 方法 检查系统的语言编码 设置 gt
  • windows 10上源码编译libjpeg-turbo和使用教程

    参考文献 Windows 配置libjpeg turbo并在python中调用 windows 10上源码编译libjpeg turbo和使用教程 compile and use libjpeg turbo on windows 10 环境
  • Pycharm及VScode 安装Copilot 踩坑

    首先在官网申请copilot使用权限 xff0c 经过一段时间等待 xff0c 就会给你授权 接下来就是针对本地的IDE集成插件对于VSCode xff0c 直接按照官网教学 xff08 VScode插件安装 xff09 即可 xff0c
  • gitlab基本配置和使用

    目录 一 gitlab的SSH配置1 下载安装git2 生成SSH keys 二 fork自己的库1 进入原库2 项目管理3 把自己fork的库clone到本地 三 如何更新自己的fork库1 先对我们现在的fork库内的文件进行修改2 进
  • 如何把word文档保存为.md文件

    第一种 插件 插件安装 一直next 安装后不用运行 打开想要转换的word文档 xff0c 选择 34 另存为 34 安装成功后 xff0c 保存格式中会自动出现md后缀格式的选项 选择 md格式 xff0c 保存即可 第二种 在线转换
  • VirtualBox安装Arch Linux2019并迁移物理机

    VirtualBox安装Arch Linux2019并迁移物理机 安装Arch Linux下载版本使用VirtualBox安装安装grub设置网络和ssh 迁移到物理机1 正常识别U盘2 拷贝U盘3 启动物理机4 更新虚拟内存盘 安装Arc
  • P4180 [BJWC2010]严格次小生成树(kruskal + 倍增 + lca)

    思路 xff1a xff08 1 xff09 先求最小生成树 xff0c 重新建图 xff08 2 xff09 遍历所有非树边 xff0c 用树上倍增求LCA的方法求出非树边两节点之间树边中的最大边和次大边 xff0c 再将非树边权值与最大
  • JUnit测试控制台输出和System.exit(0)

    JUnit测试中可以用assertTrue xff0c assertEquals等断言对代码进行简单的测试 xff1a 如返回的布尔类型是否为真 xff0c 所得的数据结果是否与预想的一样 xff0c 有时程序可能会为健壮性做一些向控制台输
  • vsphere client克隆虚拟机后配置(DNS解析+MAC地址+UUID+ip+主机名)

    1 克隆模板机 在想要克隆的虚机上右键点击克隆 xff0c 一直下一步 参考 xff1a https www jianshu com p ebba00a0e503 2 修改配置 2 1修改主机名 临时修改主机名 span class tok
  • vue3 computed计算属性

    lt DOCTYPE html gt lt html lang 61 34 en 34 gt lt head gt lt meta charset 61 34 UTF 8 34 gt lt meta http equiv 61 34 X U
  • 使用VNC远程连接centos桌面的最简便方法

    第一步 在centos上安装VNC server 这里我们安装tigervnc xff0c 也可以安装其他vnc服务器 xff0c 例如realvnc tightvnc ultravnc等 xff0c 但是realvnc要收费 xff0c
  • Django(73)django-debug-toolbar调试工具

    介绍 Django框架的调试工具栏使用django debug toolbar库 xff0c 是一组可配置的面板 xff0c 显示有关当前请求 响应的各种调试信息 xff0c 点击时 xff0c 显示有关面板内容的更多详细信息 应用 1 安

随机推荐

  • mac环境下 解决“Conda command not found”

    在终端中输入 xff1a conda version gt 查看安装的conda版本 此时 xff0c 出现Conda command not found xff0c 说明需要配置环境变量 xff0c 具体操作如下 xff1a vim ba
  • 风控模型算法

    目录 1 蚂蚁金服2 陆金所3 京东金融4 苏宁金融5 百度金融6 腾讯理财通7 宜信8 钱大掌柜9 万达金融10 网易理财11 美团金融 主要是整理目前市面上的风控模型以及风控算法 xff08 不间断更新中 xff09 1 蚂蚁金服 xf
  • 两个List对象,指定属性,取差集、交集。

    文章目录 差集交集过滤实体类测试类打印效果 差集 span class token comment 差集 list1 list2 61 list1 中不同数据 span span class token class name List sp
  • linux 目录说明

    项目价格 bin存放二进制可执行文件 ls cat mkdir等 xff0c 常用命令一般都在这里 etc存放系统管理和配置文件 home存放所有用户文件的根目录 xff0c 是用户主目录的基点 xff0c 比如用户user的主目录就是 u
  • 辗转相除法的原理

    辗转相除法是求最大公约数的一种方法 它的具体做法是 xff1a 用较小数除较大数 xff0c 再用出现的余数 xff08 第一余数 xff09 去除除数 xff0c 再用出现的余数 xff08 第二余数 xff09 去除第一余数 xff0c
  • P2078 朋友--并查集--接上章--sabrindol--Sabrina

    P2078 朋友 并查集模板题 传送门 题目背景 小明在A公司工作 xff0c 小红在B公司工作 题目描述 这两个公司的员工有一个特点 xff1a 一个公司的员工都是同性 A公司有N名员工 xff0c 其中有P对朋友关系 B公司有M名员工
  • Springboot整合myBatis(附加pagehelper分页插件)

    Springboot整合myBatis xff08 附加pagehelper分页插件 xff09 前提第一步 xff0c 创建spring boot xff0c 导入maven依赖第二步 xff0c 进行appliction配置第三步 xf
  • 【linux免费安装ssl证书,自动续费,享受https】

    为了在 CentOS 上为您的域名安装免费的 SSL 证书并启用 HTTPS xff0c 您可以使用 Let s Encrypt 提供的免费证书 下面是使用 Certbot 工具在 CentOS 系统上为您的域名安装和配置 Let s En
  • VS2017修改代码编码格式为utf-8

    VS2017修改代码编码格式为utf 8 对于国内用户来说 xff0c 大多设置Windows操作系统语言为简体中文 编码为GBK或GB2312 xff0c 由此导致Visual Studio2017默认采用GBK GB2312编码格式 x
  • 【c++】string字符串拼接的三种方式

    span class token macro property span class token directive keyword include span span class token string lt iostream gt s
  • 【单调栈】最大矩形

    问题描述 给一个直方图 xff0c 求直方图中的最大矩形的面积 例如 xff0c 下面这个图片中直方图的高度从左到右分别是2 1 4 5 1 3 3 他们的宽都是1 xff0c 其中最大的矩形是阴影部分 Input amp Output I
  • 1002 A+B for Polynomials

    span class token macro property span class token directive keyword include span span class token string lt stdio h gt sp
  • Vision-based Vehicle Speed Estimation: A Survey

    该文是对 Vision based Vehicle Speed Estimation A Survey 的翻译 xff0c 为了个人记录学习 目录 摘要1 引言2 概念与术语2 1 输入数据2 2 检测与追踪2 3 距离和速度估计2 4 应
  • 【洛谷训练】阶乘数码

    题目链接 xff1a 阶乘数码 对于这道题 xff0c 一开始我没有理解题目的意思 xff0c 后来看了题解才明白是求5 xff01 61 120的结果中含有几个2 明白题意后 xff0c 想到了要结合之前做过的一道题 xff0c 阶乘之和
  • JAVA调用天气获取接口

    JAVA调用天气获取接口 xff08 百度天气API 高德天气API xff09 解决方法可以看第四部分一 需求 xff1a 在Java项目中需要获取天气情况 xff1b 二 开发环境 xff1a idea三 试错与学习1 1 百度天气AP
  • 洛谷 P1002 过河卒

    题目描述 棋盘上 A 点有一个过河卒 xff0c 需要走到目标 B 点 卒行走的规则 xff1a 可以向下 或者向右 同时在棋盘上 C 点有一个对方的马 xff0c 该马所在的点和所有跳跃一步可达的点称为对方马的控制点 因此称之为 马拦过河
  • SQL查询数据

    1 创建新的用户并授权 xff1a span class token keyword create span span class token keyword user span cc identified span class token
  • Windows10下Linux子系统Ubuntu使用教程——安装图形界面

    一 准备 在Ubuntu中执行以下操作 xff1a 1 安装xorg sudo apt span class token operator span get install xorg 2 安装xfce4 sudo apt span clas
  • SpringBoot整合Mybatis-plus代码生成器(代码直接可用)

    前言 在做SpringBoot项目时 因为要对数据库中各表进行增删改查操作 xff0c 而表的数量又相对较多 xff0c 故而需要进行较多的controller xff0c mapper xff0c service以及实体类的创建 xff0
  • 无向图添加最少边使得图边双连通

    题意 xff1a 给定一个无向连通图 xff0c 问最少要添加多少条边 xff0c 可以使得这个图是边双连通的 题解 xff1a t a r j a n