【Cactus仙人掌图】仙人掌基础知识学习笔记

首先膜一下vfk领先全球的动态仙人掌栽培技术…

然后谢谢Time-Machine学长在暑假集训时候讲了仙人掌DP.

然后感觉听得并不是很懂…所以再来对着论文学一遍顺便写一写例题代码

这一篇主要先学仙人掌的基础(定义和性质什么的)

————————————线 割 分 是 我 >w<———————————————–

什么是仙人掌?

仙人掌是不含自环的,一条边最多属于一个简单环的无向连通图.

从定义不难看出树其实也是仙人掌的一种,也就是说这几个概念的关系大概是:

树是一种特殊的仙人掌,仙人掌是一类特殊的无向连通图.

从图片来观察一下.

这也是个仙人掌↓

那么我们现在就知道怎样来区分仙人掌和非仙人掌了

对于树我们都很熟悉,那么能不能想办法把仙人掌看成一棵树呢?

办法是有的.仙人掌上最讨厌的就是环.但是我们注意到仙人掌上不可能存在环与其他环有重边,这就好办了,我们可以把环看成类似树上的节点的东西,只是这个节点包含了更大的信息量.(注意只是类似,和真正树上的节点是不一样的!)

仿照树相关的定义,我们可以对仙人掌定义仙人掌上的节点的父亲和环的父亲.

对于仙人掌上的节点,它的父亲是可能存在多种可能的.如果它到根的路径上与它相邻的是一条简单路径而不是环,那么这个节点的父亲和平常树上节点的父亲是没什么区别的, 它的父亲是它到根的简单路径上经历的第二个点.那么如果它到根节点路径上与它相邻的是个环,则将其到根的路径上经历的第一条边所在的环当做其父亲.

对于环,我们将它的父亲定义为一个环上离根最近的点.

相对的那么就出现了儿子关系了.

对于仙人掌上的节点,它的儿子显然可以是环可以是普通节点.

但是对于环的儿子,则是环上除掉这个环的父亲以外的其他所有节点.

区别于普通树,对仙人掌而言环上的节点除了父亲之外还存在父亲节点母亲节点(为什么要起这种名字好容易搞混啊…)

环上节点的父亲节点和母亲节点指这个点在环上相邻的那两个点.

(一定不要搞混啦>_<)

怎样进行仙人掌的遍历和节点信息的确定呢?

依然是从根节点开始DFS.

如果我们将要访问一个节点,而这个节点之前还没有被访问过,那么我们直接把这个节点的父亲设为当前节点就行了.(从环和节点的父亲的定义上看这样显然没问题)

那么如果我们将要访问的那个节点已经被访问过了呢?显然这时候出现了环.

那么就有两种情况:

现在我们假设我们正在访问的节点为x,将要访问的那个节点为y

那么如果x的第一次被访问时间比y早,那么这证明y所在的环已经被我们访问过了,就不需要再单独对y处理什么.

如果x的第一次被访问时间比y晚,则说明x在一个以y为父亲的环上,此时再遍历整个环标记一下父亲节点母亲节点.

至此,整个仙人掌遍历完成,同时仙人掌上所有节点的父子父母信息都已经处理了出来.

版权声明:本文为博主原创文章,未经博主允许不得转载。

时间: 2024-11-05 19:03:08

【Cactus仙人掌图】仙人掌基础知识学习笔记的相关文章

ARM基础知识学习笔记

/*****************数电知识*******************/ PN结(Positive-Negative) 三极管:BJT(双极结型三极管Bipolar Junction Transistor)               FET(场效应管Field Effect Transistor)          (单极结型) 1.MOSFET (金属氧化物半导体Metal Oxide Semiconductor FET)               2.JFET(结型Junct

C++基础知识学习笔记

基本语法 C面向过程思想:程序=(数据结构)+(算法) 数据结构与算法分离,以算法(函数)为主. C++面向对象思想:程序=(数据结构+算法) 数据结构(属性)与算法(操作)绑成一个类,定义一个个对象对象=(数据结构+算法)  ,程序=(对象+对象+对象+--) 面向对象程序设计的程序员有两类:1.面向对象应用程序设计2.类库的设计 头文件:类的声明            ---类的外部接口       (成员函数在类声明中实现时,一般很简短,默认为内联函数)源文件:类的成员函数定义     -

〖前端开发〗HTML/CSS基础知识学习笔记

经过一天的学习,把慕课网的HTML/CSS基础知识学完了,笔记整理: 1. 文件结构: HTML文件的固定结构: <html> <head>...</head> <body>...</body> </html> html是根标签 head定义文档头部,包含: title, script, style, link, meta body是网页主要内容,包含:h1,h2-h6, p, a, img 2. 认识head标签: <head

java基础知识学习笔记(四)

类与对象 java是一种面向对象的开发语言.java程序是由类与对象组成的.类与对象之间有什么关系呢? 类是构造对象的蓝图或模板.由类构造对象的过程,称之为创建类的实例.可知对象就是类的一种实例或具体实现.为什么为选用java语言做开发,这种面向对象的语言对开发有什么好处? 首先,从设计上,对一个问题,你可以暂且不管它的具体实现是什么,先把它抽象成一个对象,问题中涉及到的数据,变成对象中的实例域,求解问题的方法,变成对象中的方法,这样做可以分清要对哪些数据进行操作,逻辑上比较清晰. 其次,当问题

Java基础知识学习笔记(一)

理解面向对象: Java纯粹的面向对象的程序设计语言,主要表现为Java完全支持面向对象的三个基本特征:继承.封装.多态. Java程序的最小单位是类,类代表客观世界中具有某种特征的一类事物,这些类可以生成系统中的多个对象,而这些对象直接映射成客观世界的各种事物,整个Java程序由一个一个的类组成. 结构化(主张按功能把软件逐步细分,面向功能)/面向对象程序设计:(分析>设计>编程)SA/OOA > SD/OOD > SP/OOP 结构化程序设计最小的程序单元是函数,每个函数都负责

linux基础知识学习笔记

1.Linux介绍 Linux版本: 内核版本:最基本的核心程序,只要用于企业和个人在此基础自行开发所需功能. 发行版本:在内核基础上增加了一些常用软件,满足企业和用户直接使用的基本需求. Linux应用领域: 个人桌面:图形桌面开发 服务器领域:整个系统就像dos命令行一样,全部命令操作. 嵌入式领域(智能硬件):在Linux基础上开发自己所需的功能然后将程序烧到硬盘中去执行. 后两个实用最广泛: 2.Linux目录和文件操作 Linux目录: Linux的四种文件类型: 1.可分享的 可以分

Go语言基础知识学习笔记1

安装教程我就不写了,推荐大家下载msc的安装包,因为他会自动帮你配置一些环境变量,但是GOPATH这个工作目录的环境变量需要自己配置 右键我的电脑->属性->高级系统设置->环境变量->新建系统变量 变量名称大写 GOPATH 路径就你的工作目录,如我的是D:/go 如果有多个工作目录就使用";"分号分割 根据约定,GOPATH下需要建立3个目录: bin (存放编译后生成的可执行文件)pkg (存放编译后生成的包文件)src (存放项目源码) 查看环境变量与工

HTML5基础知识学习笔记

1.Html5基础讲解 1.1HTML5基础标签: head:头标签,一般会将一些网页的基本配置和文件引用在head中设置: body:内容标签,里面是整个网页要展示内容部分: 1.2HTML5标题: h1-h6等,后面跟的数字越大,对应的标题的字体大小就越小: 1.3HTML5段落 p标签表示段落,在p标签中可以编写文字段落: 1.4HTML5连接 a标签表示连接,可以在里面设置点击之后跳转到其他url: 1.5HTML5图像 img标签表示图像标签,可以通过其设置图片展示: 1.6HTML5

股票基础知识学习笔记1

股票按业绩分类:分为绩优股,蓝筹股,ST股 按上市地方分类:A股,H股,N股(纳斯达克),S股(新加坡) 蓝筹股:资本雄厚,信誉优良的挂牌公司发行的股票,比如说中石油,中石化. 绩优股:业绩优良的公司发行的股票.指标是:每股税后利润和净资产收益率,在全体上市公司中处于中上地位. ST股:Special Treatment,连续两年亏损或每股净资产低于股票面值.限制涨跌幅5%,是为了提示投资者市场风险. A股:普通股票.在中国大陆注册,上市的普通股票.无纸化电子几张.实行T+1交割制度(今天买,明