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

状态图的理解和实践

        状态图(State Diagram)是软件工程和系统设计中的一种重要工具,主要用于描述对象在其生命周期中的动态行为。通过状态图,我们可以清晰地看到对象所经历的状态序列、引起状态转移的事件(event)以及因状态转移而伴随的动作(action)。本文将从理论和实践两个方面来探讨状态图,并通过一些具体的例子帮助读者更好地理解和应用状态图。

一、状态图的基本概念
  1. 状态(State)

    状态是对象在其生命周期中所处的某个特定情况或条件。每个状态描述了对象在该情况下的行为或属性。状态通常用圆角矩形表示,并在其中注明状态的名称和可能的附加信息。

  2. 事件(Event)

    事件是触发对象状态转移的条件或信号。当对象接收到某个事件时,它会根据当前状态和事件类型决定下一步的行为。事件通常用带箭头的线段表示,箭头指向目标状态。

  3. 动作(Action)

    动作是对象在状态转移过程中执行的某些操作或行为。动作通常写在事件旁边,用尖括号括起来。例如,[doAction()] 表示对象在状态转移时会执行名为 doAction() 的方法。

  4. 初始状态(Initial State)

    初始状态是对象在其生命周期开始时所处的状态。初始状态通常用实心圆点表示,并有一条带箭头的线段指向初始状态。

  5. 终止状态(Final State)

    终止状态是对象在其生命周期结束时所处的状态。终止状态通常用实心圆圈和一条带箭头的线段从该状态引出表示,没有后续状态。

二、状态图的优点

        状态图作为一种建模工具,具有以下几个显著优点:

  1. 直观性

    状态图通过图形化的方式展示了对象在不同状态下的行为,使得系统的动态行为更加直观和易于理解。

  2. 明确性

    状态图清晰地定义了对象在不同状态下的事件和动作,避免了模糊性和歧义性。

  3. 可维护性

    状态图通过结构化的方式展示了系统的动态行为,使得系统的维护和修改更加方便和高效。

  4. 可扩展性

    状态图可以方便地扩展和修改,以适应系统需求的变化和演进。

三、状态图的实践应用

        下面我们通过一些具体的例子来展示状态图在实践中的应用。

例子一:自动售货机

        自动售货机是一种常见的自动化设备,通过状态图可以很好地描述其工作流程。

  1. 状态定义

    • 空闲(Idle):售货机等待用户操作。
    • 投币(Coin Inserted):用户已投币,等待选择商品。
    • 选择商品(Product Selected):用户已选择商品,等待确认购买。
    • 出货(Dispensing):售货机正在出货。
    • 故障(Fault):售货机出现故障,需要维修。
  2. 事件和动作

    • 投币事件(Coin Inserted Event):用户投币,状态从空闲转移到投币。动作:[acceptCoin()]
    • 选择商品事件(Product Selected Event):用户选择商品,状态从投币转移到选择商品。动作:[selectProduct()]
    • 确认购买事件(Confirm Purchase Event):用户确认购买,状态从选择商品转移到出货。动作:[dispenseProduct()]
    • 出货完成事件(Dispensing Done Event):出货完成,状态从出货转移到空闲。动作:[resetMachine()]
    • 故障事件(Fault Event):售货机出现故障,状态转移到故障。动作:[raiseFault()]
  3. 状态图绘制

    根据以上定义和事件动作,我们可以绘制出自动售货机的状态图。

例子二:银行账户

        银行账户的状态管理也是状态图应用的一个典型场景。

  1. 状态定义

    • 开户(Open):账户已开立,可以存款和取款。
    • 冻结(Frozen):账户被冻结,不能取款,但可以存款。
    • 注销(Closed):账户已注销,不能存款和取款。
  2. 事件和动作

    • 存款事件(Deposit Event):用户存款,状态不变。动作:[deposit()]
    • 取款事件(Withdraw Event):用户取款,若账户为冻结状态则拒绝取款。动作:[withdraw()]
    • 冻结事件(Freeze Event):账户被冻结,状态从开户转移到冻结。动作:[freezeAccount()]
    • 解冻事件(Unfreeze Event):账户被解冻,状态从冻结转移到开户。动作:[unfreezeAccount()]
    • 注销事件(Close Event):账户被注销,状态从开户转移到注销。动作:[closeAccount()]
  3. 状态图绘制

    根据以上定义和事件动作,我们可以绘制出银行账户的状态图。

例子三:交通信号灯

        交通信号灯是另一个典型的例子,通过状态图可以清晰地展示其工作状态。

  1. 状态定义

    • 红灯(Red):车辆停止,行人通过。
    • 绿灯(Green):车辆通行,行人等待。
    • 黄灯(Yellow):车辆准备停止,行人等待。
  2. 事件和动作

    • 定时器到期事件(Timer Expired Event):定时器到期,触发状态转移。动作:[changeLight()]
  3. 状态图绘制

    根据以上定义和事件动作,我们可以绘制出交通信号灯的状态图。状态图展示了红灯、绿灯和黄灯之间的循环转移。

四、状态图在实际开发中的应用

        在实际开发中,状态图通常与面向对象的设计方法相结合,用于设计和实现具有复杂状态管理的系统。以下是一些常见的应用场景:

  1. 用户界面(UI)设计

    状态图可以用于描述用户界面的状态转移,例如按钮的点击、窗口的打开和关闭等。

  2. 游戏开发

    状态图在游戏开发中尤为重要,用于描述游戏角色的状态转移,例如攻击、防御、死亡等。

  3. 工作流管理

    状态图可以用于描述业务流程中的状态转移,例如审批流程、订单处理等。

  4. 嵌入式系统设计

    状态图在嵌入式系统设计中也非常有用,用于描述硬件设备的状态管理,例如电机控制、传感器数据处理等。

总结

        状态图是一种强大的建模工具,用于描述对象在其生命周期中的动态行为。通过状态图,我们可以清晰地看到对象的状态转移、事件和动作,从而更好地理解和设计系统。在实际开发中,状态图与面向对象的设计方法相结合,可以用于设计和实现具有复杂状态管理的系统。通过学习和实践状态图,我们可以提高系统的可维护性、可扩展性和可靠性。希望本文能够帮助读者更好地理解和应用状态图。

相关文章:

状态图的理解和实践

状态图(State Diagram)是软件工程和系统设计中的一种重要工具,主要用于描述对象在其生命周期中的动态行为。通过状态图,我们可以清晰地看到对象所经历的状态序列、引起状态转移的事件(event)以及因状态转移…...

mysql(基础语法)

准备一张员工表 /*Navicat Premium Data TransferSource Server : localhost_3306Source Server Type : MySQLSource Server Version : 80037 (8.0.37)Source Host : localhost:3306Source Schema : studymysqlTarget Server Type : MySQLTar…...

openjdk17 从C++视角看 String的intern的jni方法JVM_InternString方法被gcc编译器连接

symbols-unix 文件部分内容 JVM_IHashCode JVM_InitClassName JVM_InitStackTraceElement JVM_InitStackTraceElementArray JVM_InitializeFromArchive JVM_InternString 要理解在 symbols-unix 文件中包含 JVM_InternString 方法的原因,我们需要从构建过程、符号…...

金融保险行业数字化创新实践:如何高效落地自主可控的企业级大数据平台

使用 TapData,化繁为简,摆脱手动搭建、维护数据管道的诸多烦扰,轻量替代 OGG, Kettle 等同步工具,以及基于 Kafka 的 ETL 解决方案,「CDC 流处理 数据集成」组合拳,加速仓内数据流转,帮助企业…...

一键打断线(根据相交点打断)——CAD c# 二次开发

多条相交线根据交点一键打断,如下图: 部分代码如下: finally namespace IFoxDemo; public class Class1 {[CommandMethod("ddx")]public static void Demo(){//"ifox可以了".Print();Database db HostApplicationServices.Workin…...

flask基础

from flask import Flask, requestapp Flask(__name__)# app.route(/) # def hello_world(): # put applications code here # return Hello World!app.route(/) # 路由 当用户访问特定 URL 时,Flask 会调用对应的视图函数来处理请求 def index():return …...

Springboot基于Web的高校志愿者服务管理系统81559

Springboot基于Web的高校志愿者服务管理系统81559 本系统(程序**源码数据库调试部署开发环境)带论文文档1****万字以上,文末可获取,系统界面在最后面。** 系统程序文件列表 项目功能: 志愿者,团队,招募机构,团队信息…...

各种网站(学习资源及其他)

欢迎围观笔者的个人博客~ 也欢迎通过RSS网址https://kangaroogao.github.io/atom.xml进行订阅~ 大学指南 上海交通大学生存手册中国科学技术大学人工智能与数据科学学院本科进阶指南USTC不完全入学指南大学生活质量指北科研论 信息搜集 AI信息搜集USTC飞跃网站计算机保研 技…...

熊军出席ACDU·中国行南京站,详解SQL管理之道

12月21日,2024 ACDU中国行在南京圆满收官,本次活动分为三个篇章——回顾历史、立足当下、展望未来,为线上线下与会观众呈现了一场跨越时空的技术盛宴,吸引了众多业内人士的关注。云和恩墨副总经理熊军出席此次活动并发表了主题演讲…...

Linux服务器pm2 运行chatgpt-on-wechat,搭建微信群ai机器人

安装 1.拉取项目 项目地址: chatgpt-on-wechat 2.安装依赖 pip3 install -r requirements.txt pip3 install -r requirements-optional.txt3、获取API信息 当前免费的有百度的文心一言,讯飞的个人认证提供500万token的额度。 控制台-讯飞开放平台 添加链接描述…...

独一无二,万字详谈——Linux之文件管理

Linux文件部分的学习,有这一篇的博客足矣! 目录 一、文件的命名规则 1、可以使用哪些字符? 2、文件名的长度 3、Linux文件名的大小写 4、Linux文件扩展名 二、文件管理命令 1、目录的创建/删除 (1)、目录的创建 ① mkdir…...

达梦数据库-读写分离集群部署

读写分离集群部署 读写分离集群由一个主库以及一个或者多个(最多可以配置 8 个)实时备库组成,基于实时归档实现的高性能数据库集群,不但提供数据保护、容灾等数据守护基本功能,还具有读写操作自动分离、负载均衡等特性。同时可以配置确认监视…...

C#(事件)2

一、事件的使用步骤 定义委托(如果需要): 如果没有合适的预定义委托,就需要定义一个委托来匹配事件处理程序的签名。例如,public delegate void MyEventHandler(int value);定义了一个名为MyEventHandler的委托&…...

Linux xargs 命令使用教程

简介 xargs 是一个功能强大的 Linux 命令,用于从标准输入构建和执行命令。它接受一个命令的输出,并将其作为参数提供给另一个命令。它在处理大量输入时特别有用,其含义可以解释为:extended arguments,使用 xargs 允许…...

突发!!!GitLab停止为中国大陆、港澳地区提供服务,60天内需迁移账号否则将被删除

GitLab停止为中国大陆、香港和澳门地区提供服务,要求用户在60天内迁移账号,否则将被删除。这一事件即将引起广泛的关注和讨论。以下是对该事件的扩展信息: 1. 背景介绍:GitLab是一家全球知名的软件开发平台,提供代码托…...

Centos下的OpenSSH服务器和客户端

目录 1、在 IP地址为192.168.98.11的Linux主机上安装OpenSSH服务器; 2、激活OpenSSH服务,并设置开机启动; 3、在IP地址为192.168.98.33的Linux主机上安装OpenSSH客户端,使用客户端命令(ssh、scp、sftp)访…...

赋能新一代工业机器人-望获实时linux在工业机器人领域应用案例

在工业4.0蓬勃发展的当下,工业机器人作为制造业转型升级的中流砥柱,正朝着超精密、极速响应的方向全力冲刺。然而,为其适配理想的望获实时Linux系统,却犹如寻找开启宝藏之门的关键钥匙,成为众多企业在智能化进程中的棘…...

我的JAVA-Web基础(2)

1.JDBC 防止sql注入 2.JSP JSP的基本语法 基本语法是 <% %> Java代码 <% %> 输出变量 可以转换成${变量}的EL表达式 <%! %>定义变量 JSP的基本语法包括以下几个主要部分&#xff1a; 1. 表达式&#xff08;Expression&#xff09; 表达式用于将…...

OMG DDS 规范漫谈:分布式数据交互的演进之路

一、由来与起源脉络 OMG DDS&#xff08;Object Management Group Data Distribution Service&#xff09;的发展是计算机科学和技术进步的一个缩影&#xff0c;它反映了对高效、可靠的数据共享需求的响应。DDS 的概念萌生于20世纪90年代末&#xff0c;当时分布式计算已经从理…...

JVM系列(十二) -常用调优命令汇总

最近对 JVM 技术知识进行了重新整理&#xff0c;再次献上 JVM系列文章合集索引&#xff0c;感兴趣的小伙伴可以直接点击如下地址快速阅读。 JVM系列(一) -什么是虚拟机JVM系列(二) -类的加载过程JVM系列(三) -内存布局详解JVM系列(四) -对象的创建过程JVM系列(五) -对象的内存分…...

人的心理特征

一、心理特征 通过心理学实验揭示了人类在认知、情感、行为等方面的一些普遍规律。 1. 社会性与从众心理 实验例子&#xff1a;阿什的从众实验&#xff08;Asch Conformity Experiment&#xff09;结论&#xff1a;人类天生具有从众的倾向&#xff0c;尤其是在群体中&#x…...

Python(二)str、list、tuple、dict、set

string name abcdefprint(name[0]) #a # 切片&#xff1a;取部分数据 print(name[0:3]) # 取 下标为0,1,2的字符 abc print(name[2:]) # 取 下标为2开始到最后的字符 cdef print(name…...

【CryptoJS库AES加密】

当涉及到前端加密时&#xff0c;通常需要使用加密算法来保护用户的敏感信息。下面是一个使用Vue 2和Vue 3的前端加密方法的示例&#xff1a; Vue 2版本的前端加密方法&#xff1a; // 安装crypto-js库 // npm install crypto-js --save// 导入CryptoJS模块 import CryptoJS f…...

FSW3410 双通道差分器2:1/1:2USB 3.1高速模拟切换 替代ASW3410

FSW3410 是 mux 或演示系统配置中的高速双向 被动交换机&#xff0c;适用于USBType-C™ 应用程序&#xff0c; 支持 USB3.1Gen1 和 Gen2 的数据速率。基于控 制引 脚SEL &#xff0c;该 设备提供 在 PortA 或 PortB 到 PortCOM 之间的差分通道切换。 FSW3410 是一 种通用的模…...

【蓝桥杯——物联网设计与开发】基础模块8 - RTC

目录 一、RTC &#xff08;1&#xff09;资源介绍 &#x1f505;简介 &#x1f505;时钟与分频&#xff08;十分重要‼️&#xff09; &#xff08;2&#xff09;STM32CubeMX 软件配置 &#xff08;3&#xff09;代码编写 &#xff08;4&#xff09;实验现象 二、RTC接口…...

多摩川编码器协议

多摩川编码器是一种常用的绝对值编码器&#xff0c;其协议基于485硬件接口的标准NRZ协议&#xff0c;通讯波特率为固定的2.5Mbps。以下是多摩川编码器协议的详细说明&#xff1a; 硬件接口 多摩川编码器使用RS485接口进行通信&#xff0c;接口定义如下&#xff1a; 5V供电&…...

Redis篇--常见问题篇7--缓存一致性2(分布式事务框架Seata)

1、概述 在传统的单体应用中&#xff0c;事务管理相对简单&#xff0c;通常使用数据库的本地事务&#xff08;如MySQL的BEGIN和COMMIT&#xff09;来保证数据的一致性。然而&#xff0c;在微服务架构中&#xff0c;由于每个服务都有自己的数据库&#xff0c;跨服务的事务管理变…...

活着就好20241225

亲爱的朋友们&#xff0c;大家早上好&#xff01;&#x1f31e; 今天是25号&#xff0c;星期三&#xff0c;2024年12月的第二十五天&#xff0c;同时也是第51周的第三天&#xff0c;农历甲辰[龙]年十一月初二十一日。在这晨光熹微的美好时刻&#xff0c;愿那和煦而明媚的阳光照…...

navicat在pg数据库中设置自增

navicat在pg数据库中设置自增 问题来源&#xff1a; 在springboot的mubatisplus的插入数据操作时&#xff0c;我们设置了id为自增&#xff0c;但是由于数据库那边没有设置自增&#xff0c;导致数据id为null&#xff0c;插入失败&#xff0c;但是发现navicat设置pg数据库自增不…...

在瑞芯微RK3588平台上使用RKNN部署YOLOv8Pose模型的C++实战指南

在人工智能和计算机视觉领域,人体姿态估计是一项极具挑战性的任务,它对于理解人类行为、增强人机交互等方面具有重要意义。YOLOv8Pose作为YOLO系列中的新成员,以其高效和准确性在人体姿态估计任务中脱颖而出。本文将详细介绍如何在瑞芯微RK3588平台上,使用RKNN(Rockchip N…...

2025年PMP项目管理考试时间一览表

PMP认证是全球项目管理领域公认的权威认证&#xff0c;它不仅能证明你在项目管理方面的专业水平&#xff0c;还能大大提升你的职场竞争力&#xff01; 随着企业对项目管理人才的需求不断增长&#xff0c;获得PMP认证将为你带来更多的职业机会和高薪职位。 为了帮助大家合理安排…...

NS3学习——tcpVegas算法代码详解(1)

目录 一、源码 二、详解 1.定义日志和命名空间 2.注册Typeld类:TcpVegas和GetTypeId方法的实现 3.构造函数和析构函数 4.TcpVegas类中成员函数 (1) Fork函数 (2) PktsAcked函数 (3) EnableVegas函数 (4) DisableVegas函数 一、源码 /* -*- Mode:C; c-file-style:&qu…...

【RAII | 设计模式】C++智能指针,内存管理与设计模式

前言 nav2系列教材&#xff0c;yolov11部署,系统迁移教程我会放到年后一起更新&#xff0c;最近年末手头事情多&#xff0c;还请大家多多谅解。 上一节我们讲述了C移动语义相关的知识&#xff0c;本期我们来看看C中常用的几种智能指针&#xff0c;并看看他们在设计模式中的运…...

亚马逊云科技re:Invent:2025年将发生新变化

自从2006年推出Simple Storage Service&#xff08;S3&#xff09;和Elastic Compute Cloud&#xff08;EC2&#xff09;云计算服务以来&#xff0c;亚马逊云科技在过去的18年中&#xff0c;一直都是全球云计算技术的开创者和引领者。而随着人工智能技术的飞速发展和生成式AI时…...

某集团GIF动态验证码识别

注意,本文只提供学习的思路,严禁违反法律以及破坏信息系统等行为,本文只提供思路 如有侵犯,请联系作者下架 本文识别已同步上线至OCR识别网站: http://yxlocr.nat300.top/ocr/other/16 最近某集团更新了验证码,采用gif验证码,部分数据集展示如下...

llama.cpp:PC端测试 MobileVLM -- 电脑端部署图生文大模型

llama.cpp&#xff1a;PC端测试 MobileVLM 1.环境需要2.构建项目3.PC测试 1.环境需要 以下是经实验验证可行的环境参考&#xff0c;也可尝试其他版本。 &#xff08;1&#xff09;PC&#xff1a;Ubuntu 22.04.4 &#xff08;2&#xff09;软件环境&#xff1a;如下表所示 工…...

美国加州房价数据分析01

1.项目简介 本数据分析项目目的是分析美国加州房价数据&#xff0c;预测房价中值。 环境要求&#xff1a; ancondajupyter notebookpython3.10.10 虚拟环境&#xff1a; pandas 2.1.1 numpy 1.26.1 matplotlib 3.8.0 scikit-learn1.3.1 2. 导入并探索数据集 通用的数据分析…...

聚类算法DBSCAN 改进总结

目录 1. HDBSCAN (Hierarchical DBSCAN) 2. OPTICS (Ordering Points To Identify the Clustering Structure) 3. DBSCAN++ (DBSCAN with Preprocessing) 4. DBSCAN with k-distance 5. Density Peaks Clustering (DPC) 6. Generalized DBSCAN (GDBSCAN) 总结 是的,DBS…...

深入理解 Spring IoC 容器与依赖注入:从基本概念到高级应用的全面解析

IoC 容器与依赖注入 一、什么是IoC容器二、IoC原理1. 原理解释2. 一个通俗易懂的解释3. 举个例子a. 传统方式:手动创建对象b. IoC 和 DI:控制反转与依赖注入c. 解释d.总结三、依赖注入(DI)的三种方式1. 构造器注入(Constructor Injection)2. 字段注入(Field Injection)…...

什么是自我控制能力?如何提高自我控制能力?

什么是自我控制能力&#xff1f; 自我控制能力指&#xff0c;在遇到外在事物或者心理活动发生变化之时&#xff0c;人们仍然可以把握自身&#xff0c;指导接下来行动的能力。自我控制能力对一个人来说非常重要&#xff0c;因为在遇到一些事情之事&#xff0c;如果因为控制能力…...

【基于rust-wasm的前端页面转pdf组件和示例】

基于rust-wasm前端页面转pdf组件和示例 朔源多余的废话花哨的吹牛那点东西要不要拿来试试事到如今 做个美梦 我觉得本文的意义在于,wasm扩展了浏览器的边界,但是又担心如同java的web applet水土不服. 如同我至今看不出塞班和iOS的不同下载地址&#xff1a;在github的备份 朔源…...

Issac ROS navigation测试

软硬件环境 GPU: RTX 6000 Ada 系统&#xff1a; Ubuntu22.4 1. 启动Issac sim 从这个网页Develop on NVIDIA Omniverse Platform | NVIDIA Developer下载Omniverse Launcher&#xff0c; 然后执行./omniverse-launcher-linux.AppImage&#xff0c;从EXCHANGE里依次安装Isa…...

WWW23-多行为级联|级联图卷积网络的多行为推荐

论文&#xff1a;https://arxiv.org/abs/2303.15720 代码&#xff1a;https://github.com/SS-00-SS/MBCGCN 这篇论文MB-CGCN和上一篇CRGCN是同一个团队的&#xff0c;都是级联的方式。一个用了残差&#xff0c;一个用了特征转换&#xff0c;文章最后有discussion讨论了两者的不…...

实力认可 | 通付盾入选《ISC.AI 2024创新能力全景图谱》五项领域

近日&#xff0c;ISC.AI 2024创新能力百强&#xff08;以下简称“创新百强”&#xff09;正式发布《ISC.AI 2024创新能力全景图谱》。该全景图谱是由政企、资本、高校、行业力量共同完成了领域划分、综合创新等标准的制定&#xff0c;整合梳理了参评的300余家数字安全厂商、120…...

『Linux学习笔记』FRPC 详细介绍及配置解析!

『Linux学习笔记』FRPC 详细介绍及配置解析&#xff01; 文章目录 一. FRPC 详细介绍及配置解析FRPC 的主要功能FRPC 配置文件解析全局配置代理配置第一个代理服务第二个代理服务 配置文件整体工作流程常见配置项说明FRPC 的使用步骤注意事项结论 二. 参考文献 一. FRPC 详细介…...

JS信息收集(小迪网络安全笔记~

免责声明&#xff1a;本文章仅用于交流学习&#xff0c;因文章内容而产生的任何违法&未授权行为&#xff0c;与文章作者无关&#xff01;&#xff01;&#xff01; 附&#xff1a;完整笔记目录~ ps&#xff1a;本人小白&#xff0c;笔记均在个人理解基础上整理&#xff0c;…...

nmap扫描优化

扫描优化用来提高扫描效率。当描一个大范围网络中的主机时&#xff0c;如果使用通用的方法可能需要很长的时间&#xff0c;此时可以使用一些特定选项进行扫描优化&#xff0c;以提高扫描效率。Nmap提供了几种优化方式&#xff0c;如分组扫描、设置发包方式和超时时间等。 分组…...

Nautilus源码编译傻瓜式教程二

Nautilus源码编译傻瓜式教程一 Nautilus编译 依赖项文件 接上文,点击小锤子进行编译后出现如下的错误提示 看这个报错,未找到文件或目录,再看前面的git地址是github就知道肯定是下载有问题,查找下Nautilus项目,发现在nautilus/build-aux/flatpak/org.gnome.Nautilus.json文件…...

并发编程(19)——引用计数型无锁栈

文章目录 十九、day191. 引用计数2. 代码实现2.1 单引用计数器无锁栈2.2 双引用计数器无锁栈 3. 本节的一些理解 十九、day19 上一节我们学习通过侯删链表以及风险指针与侯删链表的组合两种方式实现了并发无锁栈&#xff0c;但是这两种方式有以下缺点&#xff1a; 第一种方式…...

Santa Claus 2 (st表的lower_bound用法)

题目链接&#xff1a;Santa Claus 2 #pragma GCC optimize(2) #include <bits/stdc.h> #define int long long #define fi first #define se second #define all(v) v.begin(),v.end() using namespace std; const int inf 0x3f3f3f3f3f3f3f; const int N 2e55; int …...