2127. 参加会议的最多员工数 (困难,基环内向树,拓扑排序)

在这里插入图片描述
思路:

  1. 将每个员工作为节点,喜欢的关系作为边,显然是能够组成若干张连通图的,关键就在于如何理解一张图
  2. 首先要证明:任何一个第一步构成的图必是一个有且仅有一个环的连通图(如下面图片所示,也称为基环内向树),因为每个员工必有且仅有一个喜欢的员工,即每个节点的出度有且仅为 1,最差情况下前 n 个节点相连不构成环,但此时最后一个节点出度为0(它至少为1),因此必能构成环;对于节点环(蓝色节点)来说,所有的其他节点(绿色节点)都是指向这个环的,如果是从环指向外面,那么环中指向外面的点的出度就大于 1 了,不满足条件,所以如果有第二个环(即绿色节点构成环),那么就存在环指向环的情况,这种情况下就会有环的出口节点出度大于 1 ,综上,有且仅有一个环。
  3. 在2的前提上,显然如果要选择一个绿色的节点参加会议,那么根据有向边的传递,最终必然会传到蓝色的节点;如果选择一个蓝色节点,同样的根据有向边的传递会传到它本身。综上,我们可以发现选绿的就必须要选蓝的,选蓝的就必须要把所有蓝的全都选了,但把所有蓝的全都选了的话,由于一个员工左右两边只能坐两个人(对于节点来说就是只能连两条边),所以不管环是大是小,我们只能选择全部的蓝色节点
  4. 特殊情况,当环的大小为 2 时,它是可以接受绿色节点的,因为在环中它的左右两边是同一个节点,因此在这种情况下的选择是两个蓝色节点 + 分别连接这两个点的最长的绿色节点路径。总结引用一下评论区的一句话,两个互相暗恋的人能稳定各自吊着一群舔狗不崩盘,三个和三个以上火药味就没法隐藏,路人只能看戏插不进去
  5. 计算环的大小,首先要找到环,需要了解图的拓扑排序,拓扑排序有一个要求,就是图必须是有向无环的,那么如果对有向有环图作拓扑排序会发生什么呢?你会对所有绿色节点进行排序,然后剩下的节点就是组成环的蓝色节点
  6. 假设 f(i) 表示到节点 i 为止的最长边,计算当环的大小为 2 时,可以选择的最大节点数为 f(i) + f(j),其中 i,j 构成环,我们可以发现在第五步的拓扑排序中,我们一个一边拓扑一边以动态规划的形式来计算 f(i)
  7. 由于总的我们可能会得到很多张图,那么对于环的大小大于2的图来说,我们只能选择一个这样的图,因为它们自成环,需要绕着桌子坐一圈,中间不能有其他人插入;对于环的大小等于2的图来说,它是构成一条链的,头尾都只有一边是固定的,另一边谁坐没有限制;综上,选择最大的大环图或者所有小环图之和,两者取大
    在这里插入图片描述
class Solution:def maximumInvitations(self, favorite: List[int]) -> int:n = len(favorite)indegree = [0] * nfor i in range(n):indegree[favorite[i]] += 1tp = deque()dp = [1] * nfor i in range(n):if indegree[i] == 0:tp.append(i)while len(tp) > 0:t = tp.popleft()dp[favorite[t]] = max(dp[favorite[t]], dp[t] + 1)indegree[favorite[t]] -= 1if indegree[favorite[t]] == 0:tp.append(favorite[t])ans1, ans0 = 0, 0for i in range(n):if indegree[i] != 0:num = 0t = iwhile indegree[t] != 0:indegree[t] = 0t = favorite[t]num += 1if num > 2:ans1 = max(ans1, num)else:ans0 += dp[t] + dp[favorite[t]]return max(ans0,ans1)

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/126511.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

【uniapp】JavaScript基础学习-20231027

今天有找到一个比较好的网站 https://www.w3school.com.cn/js/index.asp 介绍也全面,内容也比较多。我觉得把最基本的语法看看,然后可以上手写代码了。其他的就是需要靠长期的学习和积累了。 基础语法的使用: 1、定义一个变量 2、对变量赋值 …

电子沙盘数字沙盘地理信息开发教程第17课

M3DGIS电子沙盘数字沙盘地理信息开发教程第17课新增加属性在MTGIS3d控件 public bool ShowFLGrid;//是否显 示方里网格。 public bool Atmosphere;//是否显示大气圈。(因为WPF不支持shader功能,所以效果嘛。。。) 在SDK中提供底层的模型访问接…

如何选择合适的进口跨境商城源码?揭秘电商平台的成功之道

了解进口跨境电商平台源码的重要性 在进口跨境电商行业的兴起中,选择合适的商城源码是创业者成功的关键之一。进口跨境商城源码可提供网站架构、功能模块、支付系统、物流管理等基础构建,帮助企业快速搭建属于自己的商城平台。然而,在众多商城…

区块链-蚂蚁链(阿里系产品),至信链(腾讯系),长安链(国家队)

目录 区块链-蚂蚁链(阿里系产品),至信链(腾讯系),长安链(国家队) ①蚂蚁链(阿里系产品) ②至信链(腾讯系) ③长安链(国家队) Hyp…

NI USB9218国产对标51.2 kS/s/ch,2通道C系列通用模拟输入模块

51.2 kS/s/ch,2通道C系列通用模拟输入模块 NI‑9218专为多用途测量而设计。 它使用针对特定测量的适配器提供了对加速度计、供电传感器、全桥和电压测量以及四分之一桥、半桥、60V和电流测量的内置支持。 每个通道可单独选择,因而用户可在各个通道上进行…

Simulink HDL--如何生成Verliog代码

Simulink生成HDL的方法可以快速设计出工程,并结合FPGA验证,相比于手写HDL代码虽然存在代码优化不足的问题。但是方法适合做工程的快速验证和基本框架搭建。本文将介绍Simulink HDL生成Verliog代码的基本操作 1、逻辑分析仪功能 Simulink生成HDL前需要通…

利用移动互联、物联网、智能算法、地理信息系统、大数据分析等信息技术开发的智慧工地云平台源码

智慧工地是指利用移动互联、物联网、智能算法、地理信息系统、大数据挖掘分析等信息技术,提高项目现场的“人•机•料•法•环•安”等施工要素信息化管理水平,实现工程施工可视化智能管理,并逐步实现绿色生态建造。 技术架构:微…

安装Redis

目录 安装步骤 1.切换到root用户,使用su命令切换到root用户. 2.使用apt命令来搜索redis相关的软件包. 3.使用qpt命令安装reids."apt install redis". 4.手动修改redis的配置文件. 5.重新启动服务器 6.使用redis自带的客户端来连接服务器. 在使用redis的命令之…

系统韧性研究(3)| 工程系统韧性要求

从最基本的层面上说,系统韧性指的是系统在逆境中继续执行其任务的程度。虽然对操作连续性至关重要,但系统的服务(能力)只是系统继续执行其任务所必须保护的一些资产。该系统必须检测不利因素,对其作出反应,…

Vscode使用国内镜像源下载,秒下

镜像源 国内镜像地址:https://vscode.cdn.azure.cn 使用方法:很简单,只需要在官网选择自己需要的版本,点击下载,在下载的路径中将我们的镜像源替换上去即可 1.81.1版本下载链接 https://vscode.cdn.azure.cn/stable/…

软件测试优秀的测试工具,会用三款工作效率能提升一半

我们将常用的测试工具分为10类。 1. 测试管理工具 2. 接口测试工具 3. 性能测试工具 4. C/S自动化工具 5.白盒测试工具 6.代码扫描工具 7.持续集成工具 8.网络测试工具 9.app自动化工具 10.web安全测试工具 注:工具排名没有任何意义。 大多数初学者&…

STM32:串口轮询模式、中断模式、DMA模式和接收不定长数据

一.串口轮询模式底层机制: 在STM32每个串口的内部都有两个寄存器:发送数据寄存器(TDR)/发送移位寄存器,当我们调用HAL_UART_Transmit 把数据发送出去时,CPU会将数据依次将数据发送到数据寄存器中,移位寄存器中的数据会根据我们设置…

【Java数据结构重点知识】第三节:认识包装类和泛型

目录 一:包装类 1.什么是包装类 2.装箱和拆箱 3.一个经典面试题 二:泛型 1.什么是泛型 2.语法 3.使用 4.泛型是如何编译的 5.泛型的上界 一:包装类 1.什么是包装类 (1)概念:在Java中&#xff0…

YOLOv7优化:独家创新(SC_C_Detect)检测头结构创新,实现涨点 | 检测头新颖创新系列

💡💡💡本文独家改进:独家创新(SC_C_Detect)检测头结构创新,适合科研创新度十足,强烈推荐 SC_C_Detect | 亲测在多个数据集能够实现大幅涨点 收录: YOLOv7高阶自研专栏介绍: http://t.csdnimg.cn/tYI0c ✨✨✨前沿最新计算机顶会复现 🚀🚀🚀YOLOv7自研…

正点原子嵌入式linux驱动开发——Linux CAN驱动

CAN是目前应用非常广泛的现场总线之一,主要应用于汽车电子和工业领域,尤其是汽车领域,汽车上大量的传感器与模块都是通过CAN总线连接起来的。CAN总线目前是自动化领域发展的热点技术之一,由于其高可靠性,CAN总线目前广…

java进行支付宝支付(沙箱环境)

目录 1.准备工作 2.idea配置文件准备 3.后端代码编写 接口1:支付订单 接口2:查询订单 接口3:订单退款 接口4:查询退款结果 接口5:获取总账单 接口6:取消订单 接口7:回调接口 定时任务…

docker环境安装+maven依赖继承问题

1,docker环境安装 我们使用yum指令进行安装,分别cmd运行: yum install -y yum-utils device-mapper-persistent-data lvm2 yum-contig-manager --add-repo https://download.docker.com/linux/centos/docker-ce.rep具体解释如下:…

如何创建 SpringBoot 多模块项目

1. 创建父模块 【添加依赖】 【删除父模块资源】 父模块只需要保留 pom.xml,其他文件的全部删除(包括 src) 2. 创建子模块 3. 修改父模块 3.1 删除不必要的依赖 3.2 添加打包类型 3.3 添加所有子模块 声明子模块有两个好处: …

Pytorch 注意力机制解析与代码实现

什么是注意力机制 注意力机制是深度学习常用的一个小技巧,它有多种多样的实现形式,尽管实现方式多样,但是每一种注意力机制的实现的核心都是类似的,就是注意力。 注意力机制的核心重点就是让网络关注到它更需要关注的地方。 当…

什么是 CNN? 卷积神经网络? 怎么用 CNN 进行分类?(3)

参考视频:https://www.youtube.com/watch?vE5Z7FQp7AQQ&listPLuhqtP7jdD8CD6rOWy20INGM44kULvrHu 视频7:CNN 的全局架构 卷积层除了做卷积操作外,还要加上 bias ,再经过非线性的函数,这么做的原因是 “scaled p…