每日一题 1993. 树上的操作

news2024/12/26 21:27:39

难度:中等
在这里插入图片描述
思路:

  1. 首先为了更好的访问每个节点的子节点,我们创建一个字典来表示key节点下的所有子节点,其次上锁,解锁不用多说
  2. 升级过程,对于条件一和三可以理解为同一个,即包括它本身在内的所有祖先节点都未上锁
  3. 对于条件二,递归遍历所有的子孙节点,如果有已上锁状态的则改为未上锁状态并返回True
class LockingTree:

    def __init__(self, parent: List[int]):
        self.parent = parent
        self.child = defaultdict(list)
        for c, p in enumerate(self.parent):
            self.child[p].append(c)
        self.locked = [-1] * len(parent)

    def lock(self, num: int, user: int) -> bool:
        if self.locked[num] == -1:
            self.locked[num] = user
            return True
        
        return False

    def unlock(self, num: int, user: int) -> bool:
        if self.locked[num] == user:
            self.locked[num] = -1
            return True
        
        return False 


    def upgrade(self, num: int, user: int) -> bool:
        n = num
        while n != -1:
            if self.locked[n] != -1:
                return False
            n = self.parent[n]
        
        def find(root):
            t = False
            for i in self.child[root]:
                if self.locked[i] != -1:
                    self.locked[i] = -1
                    t = True
                if find(i):
                    t = True
            
            return t

        if find(num):
            self.locked[num] = user
            return True
        
        return False

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

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

相关文章

基于springboot+vue的大学生竞赛交流系统(前后端分离)

博主主页:猫头鹰源码 博主简介:Java领域优质创作者、CSDN博客专家、公司架构师、全网粉丝5万、专注Java技术领域和毕业设计项目实战 主要内容:毕业设计(Javaweb项目|小程序等)、简历模板、学习资料、面试题库、技术咨询 文末联系获取 项目介绍…

人工智能机器学习-飞桨神经网络与深度学习

飞桨神经网络与深度学习-机器学习 目录 飞桨神经网络与深度学习-机器学习 1.机器学习概述 2.机器学习实践五要素 2.1.数据 2.2.模型 2.3.学习准则 2.4.优化算法 2.5.评估标准 3.实现简单的线性回归模型 3.1.数据集构建 3.2.模型构建 3.3.损失函数 3.4.模型优化 3…

Vue的进阶使用--模板语法应用拓展(表单及组件通信)

目录 ​编辑 一.事件处理器 1.监听事件 1.1首先定义监听事件,并定义调用的方法 1.2编写调用的方法 案例演示 1.编写HTML层 2.编写方法 2.Vue.js阻止重复请求 2.1模拟请求操作 2.2 测试结果及结论 二.表单验证 1.基础表单验证 1.1 HTML层 1.2JS层 …

数字经济水平测算(内含4种版本2种方式)-地级市(2011-2021年)

参照赵涛等(2020)的文章,利用熵值法和主成分对城市数字经济水平进行测算,包括原始数据及测算结果。内含4种版本2种方式,在8种情况下测算的数字经济水平。 一、数据介绍 数据名称:地级市-数字经济水平测算…

栈的简单应用(利用Stack进行四则混合运算)(JAVA)

目录 中缀表达式转后缀表达式 图解 代码实现过程: 完整代码: 利用后缀表达式求值: 完整代码: 首先我们得先了解逆波兰表达式。 中缀表达式转后缀表达式 所谓的中缀表达式其实就是我们平时写的例如:&#xff1…

基于SpringBoot的墙绘产品展示交易平台设计与实现

目录 前言 一、技术栈 二、系统功能介绍 三、核心代码 1、登录模块 2、文件上传模块 3、代码封装 前言 现代经济快节奏发展以及不断完善升级的信息化技术,让传统数据信息的管理升级为软件存储,归纳,集中处理数据信息的管理方式。本墙绘产…

生活垃圾数据集(YOLO版)

文章目录 1、数据集介绍1.1、数据集图片组成2.1、获取数据集方式 2、扩展代码2.1、文件结构树2.2、划分数据集2.3、获取数据集文件名字2.4、文件成功对应检测 3、其他文章 1、数据集介绍 1.1、数据集图片组成 【有害垃圾】:电池(1 号、2 号、5 号&…

TensorFlow安装 ,在原本的虚拟环境下配置Tensorflow.

1.TensorFlow安装 ,在原本的虚拟环境下配置Tensorflowh和pytorch 2.我首先在anaconda的环境下创建了一个tensorflow文件夹 如何先进入D盘,再进入tensorflow文件夹的目录D:cd D:\Anaconda\TensorFlowSoftWarepip install tensorflow如图所示报错解决方法 …

软件设计师考试学习2

数据结构与算法基础 数组 稀疏矩阵 用代入法计算,A 数据结构的定义 非线性结构分为树和图,区别在于有没有环路 顺序表与链表 引入头节点可以使所有的节点处理方式一致 如果没有空的头节点,头节点需要单独处理 顺序存储与链式存储 查找…

文件操作(2)

目录 文件操作的步骤: 流: 标准流: 文件指针: 文件信息区: 概念: 关系转化: 注意: 文件指针: 文件的打开和关闭: 打开方式: 打开成…

虹科方案 | LIN/CAN总线汽车零部件测试方案

文章目录 摘要一、汽车零部件测试的重要性?二、虹科的测试仿真工具如何在汽车零部件测试展露头角?三、应用场景**应用场景1:方向盘开关的功能测试****应用场景2:各类型电机的控制测试****应用场景3:RGB氛围灯的功能测试…

基于STM32+华为云IOT设计的智能门禁系统

一、项目介绍 智能门禁系统是一种应用物联网技术的智能化安防系统,提供安全高效的门禁管理和远程监控功能。传统的门禁系统通常使用磁卡、密码或钥匙等方式进行开锁,但存在易丢失、易复制、操作繁琐等问题。为了解决这些问题,并提高门禁安全…

postman-pre-request-scripts使用

一、场景 二、定义模拟接口 using Microsoft.AspNetCore.Authorization; using Microsoft.AspNetCore.Http; using Microsoft.AspNetCore.Mvc; using SaaS.Framework.DataTransfer; using System.Threading.Tasks;namespace SaaS.KDemo.Api.Controllers {[Route("api/[co…

引领初创企业的数字化转型:选择适合的低代码平台

初创企业在初期各项架构都还不完善,对于应用程序的需求多样,但是又要考量成本。所以,低代码平台就是在综合考量成本和需求的情况下的一个突出的选择。下面我们就六个方面为您介绍:初创企业选择的Zoho Creator低代码平台。 1、功能…

PREEvision Client 10.8.0

PREEvision Client 10.6.0 2692407267qq.com,更多内容请见http://user.qzone.qq.com/2692407267/

php代码审计篇熊海cms代码审计

文章目录 自动审计逐个分析首页index.php文件包含漏洞后台逻辑漏洞cookie绕过登录后台sql报错注入存储型XSS 结束吧 自动审计 看到有很多 逐个分析 首页index.php文件包含漏洞 读一下代码&#xff0c;可以看到很明显的一个文件包含 <?php //单一入口模式 error_repor…

(1) ESP32获取图像,并通过电脑端服务器显示图像

目录​​​​​​​ 一、所需器件工具 二、客户端与服务器进行UDP通信 1、客户端代码 2、服务器端代码 3、效果展示 三、客户端拍照&#xff0c;通过UDP传输到服务器进行显示 1、客户端获取图像并UDP传输 2、电脑端服务器显示图像 3、效果展示 四、代码链接 一、所需器…

高压放大器电源有什么作用和用途

高压放大器是一种专门用于放大高压信号的电子设备。它可以将低幅度的输入信号放大成高幅度的输出信号&#xff0c;用于驱动高压负载或处理高压信号。然而&#xff0c;高压放大器需要特定的电能来运行&#xff0c;而这就是电源的作用。 高压放大器电源的主要作用是为高压放大器提…

Python入门教程 | Python 命名空间和作用域

命名空间 先看看官方文档的一段话&#xff1a; A namespace is a mapping from names to objects.Most namespaces are currently implemented as Python dictionaries。 中文翻译&#xff1a;命名空间(Namespace)是从名称到对象的映射&#xff0c;大部分的命名空间都是通过 P…

投资理财五大定律

大家好&#xff0c;我是财富智星&#xff0c;今天跟大家分享一下理财的五大定律&#xff0c;一起来学习吧。 一、投资理财&#xff0c;别把鸡蛋放一个篮子里 投资理财&#xff0c;不要把所有的资金都放在同一个理财产品中。应该了解市场上各种理财产品的风险、收益、周期和起买…