并查集基础
abstract
并查集(Union-Find Set)是一种数据结构,主要用于处理动态连通性问题(Dynamic Connectivity Problem),例如在图论中判断两点是否属于同一个连通分量,以及动态地合并集合。
它广泛应用于解决最小生成树(Minimum Spanning Tree)、网络连接问题等领域。
并查集的概念
并查集是一种简单的集合表示,它支持以下3种操作:
- Initial(S):将集合S中的每个元素都初始化为只有一个单元素的子集合。
- Union(S, Root1, Root2):把集合S中的子集合Root2并入子集合Root1。要求Root1和Root2不相交,否则不执行合并。
- Find(S, x):找到集合S中单元x所在的子集合,并返回该子集合的根结点。
集合和动态连通性
并查集维护的是一些不相交的集合(Disjoint Sets)
例如,有元素集合 {1, 2, 3, 4, 5}
,可以有如下集合划分:
- 初始状态:
{ {1}, {2}, {3}, {4}, {5} }
- 合并
{1}
和{2}
:{ {1, 2}, {3}, {4}, {5} }
- 再合并
{3}
和{4}
:{ {1, 2}, {3, 4}, {5} }
- 判断
1
和2
是否属于同一集合:否
并查集的存储结构
通常用树的双亲表示法作为并查集的存储结构,每个子集合是一棵树表示。
所有表示子集合的树,构成一个森林。存放在双亲表示数组内
通常使用数组元素的下标代表集合中的元素(名字),用根节点的下标代表子集合名字
树中每个结点的双亲指针指向父节点,根结点的双亲指针为负数(可设置为该集合元素数量的相反数)。
在采用树的双亲指针数组表示作为并查集的存储表示时,集合元素的编号从0到SIZE-1
。
其中SIZE
是最大元素的个数。
初始化示例
集合 S = { 0 , 1 , 2 , 3 , 4 , 5 , 6 , 7 , 8 , 9 } S=\set{0,1,2,3,4,5,6,7,8,9} S={0,1,2,3,4,5,6,7,8,9},初始时每个元素自成一个单元素子集合。
数组表示:
下标 | 0 | 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | 9 |
---|---|---|---|---|---|---|---|---|---|---|
父节点 | -1 | -1 | -1 | -1 | -1 | -1 | -1 | -1 | -1 | -1 |
子集合的合并示例
例如,经过一定计算,子集合并为3个更大的子集合:
- S 1 = { 0 , 6 , 7 , 8 } S_1 = \set{0, 6, 7, 8} S1={0,6,7,8}
- S 2 = { 1 , 4 , 9 } S_2 = \set{1, 4, 9} S2={1,4,9}
- S 3 = { 2 , 3 , 5 } S_3 = \set{2, 3, 5} S3={2,3,5}
树状表示:
三个子集的名字分别用根节点 0 , 1 , 2 0,1,2 0,1,2表示
例如,在存储结构(双亲表示)中,元素(结点) 6 , 7 , 8 6,7,8 6,7,8的双亲结点为结点 0 0 0;于是在双亲表示数组中,下标为 6 , 7 , 8 6,7,8 6,7,8的数组分量中的值都指示 0 0 0,表明结点 6 , 7 , 8 6,7,8 6,7,8处在结点 0 0 0所表示的子集中(子集名为0),而结点0本身对应的数组分量存放的是子集0中包含的元素数量的相反数(是个负数)
其余两个子集类似
数组表示:
下标 | 0 | 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | 9 |
---|---|---|---|---|---|---|---|---|---|---|
父节点 | -4 | -3 | -3 | 2 | 1 | 2 | 0 | 0 | 0 | 1 |
说明:
- 负数表示根结点,数值是集合中元素的数量(取反)。
- 例如下标
0
的值-4
表示集合 S 1 S_1 S1 包含4个元素。
集合的合并操作
为将两个子集合合并,需将其中一个集合的根结点的双亲指针指向另一个集合的根结点。
例如合并 S 12 = S 1 ∪ S 2 S_{12}=S_1\cup S_2 S12=S1∪S2 ,结果如下:
树状表示:
下标 | 0 | 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | 9 |
---|---|---|---|---|---|---|---|---|---|---|
父节点 | -7 | 0 | -3 | 2 | 1 | 2 | 0 | 0 | 0 | 1 |
说明:
可以看到,在这类合并操作执行后,双亲表示数组中,如果要找到元素4所在集合 S 12 S_{12} S12的根节点,就不能保证S[4]
是所需要的答案(本例中S[4]=1
不是 S 12 S_{12} S12的根节点;需要继续向上跟踪,再次访问S[S[4]]=S[1]=0
,0还不是负数,所以要再次跟踪,S[0]
,发现S[0]=-7
,由此可知0
就是最初元素4所在子集合的根节点
这种改变让查询变得不够直接,可以通过路径压缩操作来改进
并查集的基本实现
并查集的结构定义如下:
#define SIZE 100
int UFSets[SIZE]; //集合元素数组 (双亲指针数组)
下面是并查集主要运算的实现。
(1)并查集的初始化操作(双亲表示数组中对应分量设置为-1,表示初始每个子集仅有一个元素)
void Initial(int S[]) {for(int i=0; i<SIZE; i++)//每个元素自成单元素集合S[i] = -1;
}
(2)并查集的Find操作
在并查集S中查找并返回包含元素x的树的根。
int Find(int S[], int x) {while(S[x] >= 0)//循环寻找x,直到S[x]是负数为止(离开循环时,x是非负的,S[x]是负数)x = S[x];//更新x(这里保证x是非负的)return x;//返回非负的值,表示元素x所在子集的根节点
}
判断两个元素是否属于同一集合,只需分别找到它们的根,再比较根是否相同即可。
(3)并查集的Union操作
求两个不相交子集合的并集。
若将两个元素所在的集合合并为一个集合,则需要先找到两个元素的根,再令一棵子集树的根指向另一棵子集树的根。
void Union(int S[], int Root1, int Root2) {if(Root1 == Root2) return;//两个根相同不合并S[Root2] = Root1;//根不同,将用其中一个根Root2的双亲结点指向另一个根Root1
}
小结
Find操作和Union操作的时间复杂度分别为O(d)和O(1),其中d为树的深度。
并查集实现的优化
在极端情况下, n n n个元素构成的集合树的深度为n,则Find
操作的最坏时间复杂度为O(n)。
改进的办法是:在做Union
操作之前,首先判别子集中的成员数量,然后令成员少的根指向成员多的根,即把小树合并到大树,为此可令根结点的绝对值保存集合树中的成员数量。
(1)改进的Union操作
void Union(int S[], int Root1, int Root2) {if(Root1 == Root2) return;//(负数的绝对值越小,值越大abs(S[Root2])<abs(S[Root1],则S[Root2] > S[Root1])if(S[Root2] > S[Root1]) { // Root2 结点数更少)S[Root1] += S[Root2]; // 累加集合树的结点总数S[Root2] = Root1; // 小树合并到大树} else {S[Root2] += S[Root1]; // 累加结点总数S[Root1] = Root2; // 小树合并到大树}
}
采用这种方法构造得到的集合树,其深度不超过 log 2 n + 1 \log_2 n + 1 log2n+1(这里 n n n为元素数量)
随着子集逐对合并,集合树的深度越来越大,为了进一步减少确定元素所在集合的时间,还可进一步对上述Find操作进行优化,当所查元素 x x x不在树的第二层时,在算法中增加一个“压缩路径”的功能,即将从根到元素x路径上的所有元素都变成根的孩子。
例如 r o o t , p 1 , p 2 , . . . , p m , x , . . . {root,p_1,p_2,...,p_m,x,...} root,p1,p2,...,pm,x,...,通过压缩操作,比如依次将 x , p m , ⋯ , p 2 , p 1 {x,p_{m},\cdots,p_{2},p_{1}} x,pm,⋯,p2,p1挂到 r o o t root root结点下;
而挂到root结点下这个操作对于双亲表示法,就是将对应的结点的数组分量(父节点)设置为root;
(2)改进find操作
int Find(int S[], int x) {int root=x;//根节点编号初始化为x//找到x所在子集根节点while(s[root]>=0)root=s[root];//这时候已经找到root了,但是为了之后的新查找更快,做路径压缩while(x!=root){//压缩路径(将树的高于第2层的结点进行压缩)int t=S[x];//t指向x的父节点(以便于处理完x沿着路径往祖先结点继续处理)S[x]=root;//x直接挂到根节点下面x=t;//更新下一个需要处理的目标}return root;//返回根节点编号
}
通过 Find 操作的“压缩路径”优化后,可使集合树的深度不超过 O ( α ( n ) ) O(\alpha(n)) O(α(n)),其中 α ( n ) \alpha(n) α(n) 是一个增长极其缓慢的函数,对于常见的正整数 n n n,通常 α ( n ) ≤ 4 \alpha(n) \leq 4 α(n)≤4。
相关文章:
并查集基础
abstract 并查集(Union-Find Set)是一种数据结构,主要用于处理动态连通性问题(Dynamic Connectivity Problem),例如在图论中判断两点是否属于同一个连通分量,以及动态地合并集合。 它广泛应用…...
FPGA 16 ,Verilog中的位宽:深入理解与应用
目录 前言 一. 位宽的基本概念 二. 位宽的定义方法 1. 使用向量变量定义位宽 ① 向量类型及位宽指定 ② 位宽范围及位索引含义 ③ 存储数据与字节数据 2. 使用常量参数定义位宽 3. 使用宏定义位宽 4. 使用[:][-:]操作符定义位宽 1. 详细解释 : 操作符 -: 操作符 …...
day2 数据结构 结构体的应用
思维导图 小练习: 定义一个数组,用来存放从终端输入的5个学生的信息【学生的信息包含学生的姓名、年纪、性别、成绩】 1>封装函数 录入5个学生信息 2>封装函数 显示学生信息 3>封装函数 删除第几个学生信息,删除后调用显示学…...
原创 传奇996_55——后端如何点击npc隐藏主界面
点击图片退出,举例: |linkexit Img|ax0.5|ay0.5|percentx50|percenty50|imgpublic/touming2.png|hideMain1|linkexit <Img|x0|y0|esc1|show4|bg1|move0|imgcustom/new/longhun/bg.png|loadDelay0|reset1|hideMain1>...
java+springboot+mysql法律咨询网
项目介绍: 使用javaspringbootmysql开发的法律咨询网(文书),系统包含管理员、用户角色,功能如下: 管理员:登录系统;用户管理;文章管理(法律知识)…...
【AIGC】如何高效使用ChatGPT挖掘AI最大潜能?26个Prompt提问秘诀帮你提升300%效率的!
还记得第一次使用ChatGPT时,那种既兴奋又困惑的心情吗?我是从一个对AI一知半解的普通用户,逐步成长为现在的“ChatGPT大神”。这一过程并非一蹴而就,而是通过不断的探索和实践,掌握了一系列高效使用的技巧。今天&#…...
HarmonyOS-高级(四)
文章目录 应用开发安全应用DFX能力介绍HiLog使用指导HiAppEvent 🏡作者主页:点击! 🤖HarmonyOS专栏:点击! ⏰️创作时间:2024年12月11日11点18分 应用开发安全 应用隐私保护 隐私声明弹窗的作…...
国科大智能设备安全-APK逆向分析实验
APK逆向分析实验 使用APK常用逆向分析工具,对提供的移动应用程序APK文件进行逆向分析,提交逆向后代码和分析报告。具体任务如下: 任务一:安装并熟悉Apktool、Jadx等APK常用逆向工具的使用方法,对提供的Facebook Updat…...
Batch Normalization和 Layer Normalization
Batch Normalization和 Layer Normalization Batch Normalization (BN) 和 Layer Normalization (LN) 是深度学习中常用的归一化技术,它们的主要目的是加速训练、提高模型的收敛速度和稳定性。以下是对这两种归一化技术的详细讲解: 1. Batch Normalizat…...
数据结构——顺序表
顺序表的简单介绍 顺序表的概念:顺序表是用一段物理地址连续的存储单元依次存储数据元素的线性结构,一般情况下采用数组存储。在数组上完成数据的增删查改。 特点:顺序表的特点是可以通过元素的索引快速访问数据,其访问时间复杂度…...
C语言中互斥锁、信号量和条件变量的所有相关函数、参数、返回值和说明
1. 互斥锁(Mutex)的使用 互斥锁用于保护共享数据,防止多个线程同时修改它。 #include <pthread.h> #include <stdio.h> #include <stdlib.h> // 定义一个全局共享变量 int shared_counter 0; // 定义一个互斥锁 pthrea…...
(前序 简单)leetcode 226翻转二叉树
代码随想录说用前序遍历和后序遍历方便,而中序遍历比较绕。 活用自定义函数使程序结构更为清晰 这里用的是前序遍历,根结点root指向left和root,交换root的左右指向 执行过程: 也就是交换下例的 2 ,7 使得交换后&…...
搭建springmvc项目
什么是springmvc MVC它是一种设计理念。把程序按照指定的结构来划分: Model模型 View视图 Controller控制层 springmvc框架是spring框架的一个分支。它是按照mvc架构思想设计的一款框架。 springmvc的主要作用: 接收浏览器的请求数据,对数据进行处理,…...
解惑(一) ----- super(XXX, self).__init__()到底是代表什么含义
转载:self参数 - __ init__ ()方法 super(Net, self).__init__()是什么_super(net, self).init()-CSDN博客 相信大家在很多场合特别是写神经网络的代码的时候都看到过下面的这种代码: import torch import torch.nn as nn import torch.nn.functional …...
23种设计模式之责任链模式
目录 1. 简介2. 代码2.1 AbstractLogger(抽象处理者)2.2 InfoLogger (具体处理者)2.3 DebugLogger (具体处理者)2.4 ErrorLogger (具体处理者)2.5 Test (测试)…...
电感2222
1 电感 1电感是什么 2 电感的电流不能突变:电容是两端电压不能突变 3 电感只是限制电流变化速度...
车牌识别OCR授权:助力国产化升级,全面提升道路监控效率
政策背景:国产化升级,推动道路监控产业转型 随着国家对信息安全的重视,国内各大公安、政企机构已进入全面升级国产化平台的实施阶段。根据最新的政策要求,公安和政府部门必须在未来三年内完成平台的国产化替换工作。这一举措不仅…...
【人工智能-中级】卷积神经网络(CNN)的中阶应用:从图像分类到目标检测
文章目录 卷积神经网络(CNN)的中阶应用:从图像分类到目标检测1. 图像分类:CNN的基础应用CNN结构概述经典网络架构2. 目标检测:从分类到定位基于区域的目标检测方法单阶段目标检测方法边界框回归与NMS(Non-Maximum Suppression)3. 深度学习中的目标检测挑战与解决方案4. …...
从资产流动分析WIF市场潜力X.game深究其他未知因素
近日,两则关于WIF最新消息引起了投资者们的注意。据报道,11月28日Vintermute在过去13小时内累计从Binance交易所提取了价值533万美元的WIF,此举不仅彰显了其强大的资金实力,更在某种程度上推动了WIF币价的反弹;另一方面…...
【工具变量】上市公司企业经营困境指数数据(Zscore、Oscore、RLPM、Merton DD)2000-2021年
一、资料范围:包括Zscore、Oscore、RLPM、Merton DD,经营困境说明如下:(1)Zscore:以2.67和1.81作为临界值计算样本得分所处的范围。Zscore>2.67 为财务状况良好,发生破产的可能性较小。Zscor…...
freeswitch(监听、旁听)
亲测版本centos 7.9系统–》 freeswitch1.10.9 本人freeswitch安装路径(根据自己的路径进入) /usr/local/freeswitch/etc/freeswitch使用场景: 比如A和B在通话,C想监听他们通话内容,其他设备是不知道有人在监听的使用方法: 进入dialplan/default.xml 在配置表添加 <…...
php基础:命名空间
1.PHP 命名空间可以解决以下两类问题: 1.用户编写的代码与PHP内部的类/函数/常量或第三方类/函数/常量之间的名字冲突。 2.为很长的标识符名称(通常是为了缓解第一类问题而定义的)创建一个别名(或简短)的名称,以提高源代码的可读…...
SAP FICO物料分类账实操
物料分类账所涉及到的差异从采购入库的时候就可能已经产生,接下来从创建物料主数据开始对可能产生差异地方进行分析。其中有些操作步骤在标准价格估算这一篇博文中已经有过演示,可以先做了解。 其中的某些创建在有直接可用的情况下是非必须的࿰…...
【信息系统项目管理师】高分论文:论信息系统项目的整合管理(移动警务通系统)
更多内容请见: 备考信息系统项目管理师-专栏介绍和目录 文章目录 正文1、制定项目章程2、制定项目管理计划3、指导与管理项目工作4、管理项目知识5、监控项目工作6、实施整体变更控制7、结束项目或阶段正文 2022年2月,我有幸作为项目经理参加了“某市公安移动警务通系统”项…...
学习笔记069——Java集合框架
文章目录 集合1、List 接口2、Set 接口3、Map3.1、Map 常用实现类 集合 需要创建多个对象,但是数量和类型不确定。 集合是 Java 提供的一种类型,功能和数组类似,但是长度和数据类型都是动态。 集合框架(包括很多类和接口&#…...
JIS-CTF: VulnUpload靶场渗透
JIS-CTF: VulnUpload来自 <https://www.vulnhub.com/entry/jis-ctf-vulnupload,228/> 1,将两台虚拟机网络连接都改为NAT模式 2,攻击机上做namp局域网扫描发现靶机 nmap -sn 192.168.23.0/24 靶机IP地址192.168.23.162,攻击机IP地址192.168.23.140…...
2024年食堂采购系统源码技术趋势:如何开发智能的供应链管理APP
本篇文章,小编将与大家一同探讨2024年食堂采购系统的技术趋势,并提供开发更智能的供应链管理APP的策略。 一、2024年食堂采购系统的技术趋势 1.人工智能与机器学习的深度应用 在2024年,AI和机器学习在食堂采购系统中的应用将更加普遍。这些…...
Flink CDC实时同步mysql数据
官方参考资料: https://nightlies.apache.org/flink/flink-cdc-docs-master/zh/docs/connectors/flink-sources/mysql-cdc/ Apache Flink 的 Change Data Capture (CDC) 是一种用于捕获数据库变化(如插入、更新和删除操作)的技术。Flink CDC…...
解决MAC装win系统投屏失败问题(AMD显卡)
一、问题描述 电脑接上HDMI线后,电脑上能显示有外部显示器接入,但是外接显示器无投屏画面 二、已测试的方法 1 更改电脑分辨,结果无效 2 删除BootCamp,结果无效 3更新电脑系统,结果无效 4 在设备管理器中&#…...
【数据结构——查找】二叉排序树(头歌实践教学平台习题)【合集】
目录😋 任务描述 相关知识 测试说明 我的通关代码: 测试结果: 任务描述 本关任务:实现二叉排序树的基本算法。 相关知识 为了完成本关任务,你需要掌握:二叉树的创建、查找和删除算法。具体如下: (1)由…...
【NumPy进阶】:内存视图、性能优化与高级线性代数
目录 1. 深入理解 NumPy 的内存视图与拷贝1.1 内存视图(View)1.1.1 创建视图1.1.2 视图的特点 1.2 数组拷贝(Copy)1.2.1 创建拷贝1.2.2 拷贝的特点 1.3 视图与拷贝的选择 2. NumPy 的优化与性能提升技巧2.1 向量化操作示例&#x…...
[C++]多态
1. 什么是多态性? 1.定义 多态性是指同一个函数或操作在不同对象上表现出不同的行为。 2.分类 C 中的多态性主要分为两种: 1.编译时多态性(静态多态性): 编译时决定调用哪个函数。通过 函数重载 和 运算符重载 实…...
文本编辑器与正则表达式
1. VIM 编辑器 1.1 VIM 基本概念 VIM 是一个高度可定制的文本编辑器,广泛用于程序员的日常开发中。与传统的文本编辑器不同,VIM 基于模式操作,具有以下几个主要特点: 普通模式:用于浏览和修改文本。插入模式&#x…...
鲲鹏麒麟安装Kafka-v1.1.1
因项目需要在鲲鹏麒麟服务器上安装Kafka v1.1.1,因此这里将安装配置过程记录下来。 环境说明 # 查看系统相关详细信息 [roottest kafka_2.12-1.1.1]# uname -a Linux test.novalocal 4.19.148 #1 SMP Mon Oct 5 22:04:46 EDT 2020 aarch64 aarch64 aarch64 GNU/Li…...
scala基础_数据类型概览
Scala 数据类型 下表列出了 Scala 支持的数据类型: 类型类别数据类型描述Scala标准库中的实际类基本类型Byte8位有符号整数,数值范围为 -128 到 127scala.Byte基本类型Short16位有符号整数,数值范围为 -32768 到 32767scala.Short基本类型I…...
【重生之我要苦学C语言】文件操作
文件操作 为什么使用文件 如果没有文件,我们写的程序的数据是存储在电脑的内存中,如果程序退出,内存回收,数据就丢失了,等再次运行程序,是看不到上次程序的数据的,如果要将数据进行持久化的保…...
Python中PyTorch详解
文章目录 Python中PyTorch详解一、引言二、PyTorch核心概念1、张量(Tensor)1.1、创建张量1.2、张量操作 2、自动求导(Autograd)2.1、自动求导示例 三、构建神经网络1、使用nn模块2、优化器(Optimizer) 四、…...
Codigger SIDE之Helix编辑器
在Codigger的多维世界中,Helix编辑器以其卓越的性能和灵活性,成为开发者手中的利剑。基于Rust构建,Helix不仅继承了Vim编辑器的经典特性,更以其现代化的功能,重新定义了代码编辑的边界。 模式切换的艺术 Helix的模式切…...
vue3+echarts+websocket分时图与K线图实时推送
一、父组件代码: <template> <div class"chart-box" v-loading"loading"> <!-- tab导航栏 --> <div class"tab-box"> <div class"tab-list"> <div v-for"(item, index) in tabList…...
Maven常用插件清单
Maven 是一个强大的项目管理和构建工具,它使用插件来执行各种构建生命周期任务。以下是常用的一些 Maven 构建插件及其主要用途: 1. Maven Compiler Plugin 用途:编译Java源代码。配置示例:<build><plugins><plu…...
敏捷项目管理
虽然一直在践行敏捷开发,包括站会、尝试使用Confluence做知识wiki、每周分享等等,当然项目日常使用的coding、禅道、jira 项目管理和 jenkins 、git之类的CICD工具更不必说,但确实没有系统地去学习过敏捷开发管理。昨天被人问到敏捷开发到底是…...
牛客小白月赛107(A~E)
文章目录 A Cidoai的吃饭思路code B Cidoai的听歌思路code C Cidoai的植物思路code D Cidoai的猫猫思路code E Cidoai的可乐思路code 牛客小白月赛107 A Cidoai的吃饭 思路 签到题,按题意模拟即可 code void solve(){int n,a,b,c;cin >> n >> a &g…...
【传感器技术】第6章 压电式传感器,压电材料,压电效应,电压放大器
关注作者了解更多 我的其他CSDN专栏 过程控制系统 工程测试技术 虚拟仪器技术 可编程控制器 工业现场总线 数字图像处理 智能控制 传感器技术 嵌入式系统 复变函数与积分变换 单片机原理 线性代数 大学物理 热工与工程流体力学 数字信号处理 光电融合集成电路…...
基于Python深度学习的【猫狗宠物识别】系统设计实现
一、简介 宠物识别系统,本系统使用Python作为主要开发语言,基于TensorFlow搭建卷积神经网络算法,并收集了37种常见的猫狗宠物种类数据集【‘阿比西尼亚猫(Abyssinian)’, ‘孟加拉猫(Bengal)’…...
网站多语言前端翻译translate.js 在vue项目中的使用方法
网站多语言前端翻译translate.js 在vue项目中的使用方法 需求 客户网站,想要多语言版本的,通常的解决办法有两种: 1、最直接的办法:编写两种,或者多种语言版本的网站,也就是一个网站有几种语言࿰…...
HTML技术贴:深入理解与实践
1. 引言 HTML(HyperText Markup Language,超文本标记语言)是构建网页和网上应用的标准标记语言。它定义了网页内容的结构和意义,由一系列元素组成,这些元素告诉浏览器如何展示内容。本技术贴旨在深入探讨HTML的核心技…...
在SQL Server中使用hash join来提高表连接的性能
在SQL Server中使用hash join来提高表连接性能时,需要考虑数据集的大小、索引情况以及查询的具体需求。 在SQL Server中使用hash join来提高表连接性能的情况主要包括以下几种: • 两个表都没有合适的索引:Hash join通常适合当两个表都没有索…...
一键学懂BurpSuite(8)
声明! 学习视频来自B站up主 泷羽sec 有兴趣的师傅可以关注一下,如涉及侵权马上删除文章,笔记只是方便各位师傅的学习和探讨,文章所提到的网站以及内容,只做学习交流,其他均与本人以及泷羽sec团队无关&#…...
系统思考—战略决策
别用管理上的勤奋,来掩盖经营上的懒惰。 日本一家物业公司,因经营不善,面临生死存亡的危机。老板为了扭转局面,采取了很多管理手段——提高员工积极性,推行业绩与绩效挂钩,实施各种考核制度。然而…...
mybatis,mysql之collection 与 association 不生效问题(仅是个人常犯错误)
因为自己马大哈,经常犯这个错误,原以为是拷贝的代码问题,最后发现是自己的遗漏问题! 看代码,先看不生效的 <resultMap type"Price" id"PriceResult"><id property"priceId&qu…...