树链剖分的优化算法_第1页
树链剖分的优化算法_第2页
树链剖分的优化算法_第3页
树链剖分的优化算法_第4页
树链剖分的优化算法_第5页
已阅读5页,还剩21页未读 继续免费阅读

下载本文档

版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领

文档简介

1/1树链剖分的优化算法第一部分树链剖分的概念及其应用 2第二部分重链剖分和轻链剖分 4第三部分树上倍增的原理与应用 6第四部分LCA的算法优化与复杂度分析 9第五部分区间和的在线维护与复杂度优化 12第六部分RMQ与区间和维护的结合 16第七部分树链剖分的扩展与应用场景 19第八部分树链剖分的局限性与改进方向 22

第一部分树链剖分的概念及其应用树链剖分的概念

树链剖分是一种用于高效处理树形结构中查询和更新的技术。它将树划分为一系列不交的路径,称为树链,每个树链只包含树中的一个顶点到根的路径。

树链剖分算法通过递归地将树划分为子树来工作。在每个递归步骤中,选择子树中大小最大的子树作为树链,并将剩余的子树连接到树链上。这个过程持续进行,直到所有的顶点都包含在树链中。

树链剖分的优点

*查询和更新效率高:树链剖分允许在树形结构中快速执行查询和更新操作。查询和更新操作在每个树链上独立执行,从而大大降低了复杂度。

*空间占用小:树链剖分只存储树链信息,因此空间占用通常较小。

*容易实现:树链剖分算法相对容易理解和实现。

树链剖分的应用

树链剖分在各种应用中都有着广泛的用途,包括:

*树形结构的距离查询:树链剖分可以快速计算树中任意两个顶点之间的距离。

*树形结构的路径查询:树链剖分可以快速找到树中两个顶点之间的路径。

*树形结构的最大值/最小值查询:树链剖分可以快速找到树形结构中指定路径上的最大值/最小值。

*树形结构的区间查询:树链剖分可以快速处理指定区间内的查询,例如求和或求最大值。

*树形结构的更新:树链剖分可以高效地更新树形结构中的值,例如修改边权重或修改顶点值。

树链剖分算法

树链剖分算法基于以下步骤:

1.初始化:将树的所有顶点标记为未访问。

2.选择树链:找到大小最大的未访问子树并将其标记为树链。

3.连接子树:将剩余的子树连接到树链上。

4.递归:对每个子树重复步骤1-3。

复杂度分析

树链剖分算法的时间复杂度为O(nlogn),其中n是树中的顶点数。空间复杂度为O(n),用于存储树链信息。

示例

下图为一棵树的树链剖分结果:

```

1

/\

23

/\/\

4567

```

树链剖分将这棵树划分为两个树链:

*链1:1->2->4

*链2:1->3->6->7

利用树链剖分,可以高效地执行以下查询:

*查询顶点4到顶点7的距离:10

*查找顶点2到顶点6的路径:2->1->3->6

*查询链1上的最小值:2

*计算链1上[2,4]区间内的和:10

*更新边1-2的权重为10:O(1)第二部分重链剖分和轻链剖分关键词关键要点重链剖分

1.将树划分为若干个连续重链,重链上每个节点的子树大小大于或等于总节点数的1/3。

2.使用跳跃指针优化搜索,从重链的尾端逐级向上跳跃,复杂度降为O(logn)。

3.在重链上进行操作时,可以避免频繁的回溯,提高效率。

轻链剖分

重链剖分

重链剖分是一种用于树形结构上的优化算法,它可以将一棵树分解成一系列连接在一起的重链和轻链。具体过程如下:

1.选择根节点:选择树中的一个节点作为根节点。

2.计算子树大小:对于每个节点,计算其子树中节点的数量,称为子树大小。

3.找到重儿子:对于每个节点,找到其子树大小最大的儿子节点,称为重儿子。

4.形成重链:将每个节点与其重儿子连接,形成重链。

5.形成轻链:将每个节点与其他儿子节点连接,形成轻链。

重链剖分的目的是将树分解成一系列具有以下性质的重链和轻链:

*重链长度较长:重链通常包含树中大部分的节点。

*轻链长度较短:轻链通常包含较少的节点,长度最多为根节点到叶节点的一半。

轻链剖分

轻链剖分是一种与重链剖分类似的优化算法,它将树分解成一系列连接在一起的轻链和重链。具体过程如下:

1.选择根节点:选择树中的一个节点作为根节点。

2.计算子树大小:对于每个节点,计算其子树中节点的数量,称为子树大小。

3.找到轻儿子:对于每个节点,找到其子树大小最小的儿子节点,称为轻儿子。

4.形成轻链:将每个节点与其轻儿子连接,形成轻链。

5.形成重链:将每个节点与其他儿子节点连接,形成重链。

轻链剖分的目的是将树分解成一系列具有以下性质的轻链和重链:

*轻链长度较短:轻链通常包含树中大部分的节点。

*重链长度较长:重链通常包含较少的节点,长度最多为根节点到叶节点的一半。

重链剖分和轻链剖分的比较

重链剖分和轻链剖分都是用于树形结构上的优化算法,它们具有以下主要区别:

*重链剖分优先考虑重儿子,轻链剖分优先考虑轻儿子。

*重链剖分产生的重链通常较长,而轻链剖分产生的重链通常较短。

*重链剖分更适合于查询涉及频繁跳跃的情况,而轻链剖分更适合于查询涉及较少跳跃的情况。

在实际应用中,可以选择根据具体问题的情况来选择重链剖分或轻链剖分。第三部分树上倍增的原理与应用关键词关键要点【树上倍增的原理】

1.树上倍增是一种利用二进制分解思想将树上任意两点之间的最短路径划分成若干个2的幂步长,从而将树上两点间的距离查询问题转换成若干个查询2的幂步长距离的问题。

2.该算法通过预处理出一系列以2的幂作为步长的父节点信息表,以便快速查询出两点间指定步长的祖先节点。

3.算法的复杂度为O(nlog^2n),其中n为树的节点数,预处理阶段的复杂度为O(nlogn),查询阶段的复杂度为O(logn)。

【树上倍增的应用】

树上倍增的原理

树上倍增是一种树形结构优化算法,用以高效地计算树中节点之间的距离或路径。其基本思想是利用二进制思想,将长路径分解成若干个较小路径,从而缩短计算复杂度。

具体而言,树上倍增算法建立了若干个倍增层,其中每个倍增层将树中从一个节点出发,经过一定距离(称为倍增距离)所到达的节点进行存储。倍增距离通常是2的幂,即2^i。这样,任意两个节点之间的距离可以通过跳跃这些倍增层来快速计算,从而降低计算复杂度。

树上倍增的应用

树上倍增算法在树形结构中有着广泛的应用,包括:

1.最短路径查询:计算树中任意两个节点之间的最短路径距离。利用倍增层,可以快速跳跃到距离目标节点较近的节点,再进行一次DFS即可得到最短路径。

2.最近公共祖先查询:求解树中任意两个节点的最近公共祖先(LCA)。通过不断向上跳跃倍增层,可以快速找到两个节点在倍增树中的分岔点,即它们的LCA。

3.路径求和:计算树中一条给定路径上所有节点的权值之和。利用倍增层,可以快速跳跃到路径上的关键节点,然后依次DFS进行累加。

4.子树信息统计:统计树中某一子树中满足特定条件的节点数量或其他信息。通过倍增层,可以快速定位子树的根节点,然后进行DFS遍历计算。

算法实现

树上倍增算法的实现通常包括以下步骤:

1.预处理:建立倍增层。从每个节点开始,依次计算倍增距离为2^i的节点,并存储在倍增数组中。

2.跳跃:根据需要,在倍增层中进行跳跃。对于距离为d的目标节点,可以进行log(d)次跳跃,每次跳跃倍增距离为2^i,其中i为满足2^i<=d的最大整数。

3.查询:根据跳跃结果,进行最终查询。例如,对于最短路径查询,跳跃到距离目标节点较近的节点后,再进行一次DFS即可得到最短路径。

时间复杂度

树上倍增算法的时间复杂度取决于倍增层数。预处理过程的时间复杂度为O(nlogn),其中n为树中节点数量。查询过程的时间复杂度为O(logn),因为只需要进行log(n)次跳跃。

空间复杂度

树上倍增算法的空间复杂度取决于倍增层数。倍增数组的大小为O(nlogn),因为需要存储每个节点在每个倍增层中的倍增节点。

范例

考虑一棵由7个节点组成的树,如图所示:

```

1

/\

23

/\\

456

\

7

```

建立倍增层后,该树的倍增数组如下:

|节点|倍增层2^0|倍增层2^1|倍增层2^2|

|||||

|1|1|2|4|

|2|1|3|4|

|3|1|-1|4|

|4|2|5|-1|

|5|2|-1|-1|

|6|3|4|-1|

|7|4|-1|-1|

例如,要计算节点5和7之间的最短路径距离,可以先跳跃到倍增层2^2的节点4,再跳跃到倍增层2^0的节点2,最后再跳跃到节点7。这样,总共需要跳跃3次,最终计算出最短路径距离为3。第四部分LCA的算法优化与复杂度分析关键词关键要点LCA的算法优化

最长链剖分

1.分解树为链,使每条链长度尽量长。

2.求解每条链上的LCA,复杂度为O(nlogn)。

3.应用树剖算法回答LCA查询,复杂度为O(logn)。

倍增法

LCA的算法优化与复杂度分析

在树链剖分算法中,LCA(最近公共祖先)的快速查询是至关重要的。本文将介绍两种算法优化,以减少LCA查询的平均时间复杂度,并提供其复杂度分析。

1.倍增算法

倍增算法是一种递归算法,利用预先计算好的跳跃表来快速查询LCA。其思想是将树中的每个节点作为根,逐层向上跳跃,直到找到最近的公共祖先。

算法步骤:

*对树进行深度优先搜索(DFS),记录每个节点的父节点。

*为每个节点计算一个跳跃表,其中第i项表示向上跳跃2^i步后的祖先节点。

*查询LCA时,从两个节点开始向上跳跃,每次跳跃使用最大的跳跃步长,直到找到相同的祖先。

时间复杂度:

*预处理的时间复杂度为O(nlogn),其中n为树中节点数。

*LCA查询的时间复杂度为O(logn)。

2.Tarjan离线算法

Tarjan离线算法是一种非递归算法,利用并查集数据结构来查询LCA。其思想是将所有LCA查询离线存储,一次性处理所有查询。

算法步骤:

*记录所有LCA查询。

*按照DFS序遍历树,并在每个节点处执行:

*将自己加入并查集中。

*查询其子节点和自己之间LCA的并查集代表。

*对于每个LCA查询,输出其并查集代表。

时间复杂度:

*预处理的时间复杂度为O(nlogn),其中n为树中节点数。

*LCA查询的时间复杂度为O(1)。

综合比较

倍增算法和Tarjan离线算法各有优缺点:

*倍增算法的预处理时间复杂度更低,但LCA查询的时间复杂度较高。

*Tarjan离线算法的预处理时间复杂度较高,但LCA查询的时间复杂度较低。

在实际应用中,选择哪种算法取决于具体场景。对于在线频繁查询LCA的情况,倍增算法更合适;对于离线一次性查询多个LCA的情况,Tarjan离线算法更合适。

其他优化技巧

除了上述算法优化之外,还可以采用以下技巧进一步降低LCA查询的复杂度:

*轻重链剖分:将树划分为轻重链,对轻链使用倍增算法,对重链使用其他算法。

*树高优化:使用树高优化技巧,减少LCA查询的跳跃次数。

*并查集合并优化:使用路径压缩和按秩合并等优化技巧,提高并查集的查询效率。

通过采用这些优化技巧,可以显著降低树链剖分算法中LCA查询的时间复杂度,从而提高算法整体效率。第五部分区间和的在线维护与复杂度优化关键词关键要点区间和数据结构优化

1.基于线段树的区间和查询与更新:线段树是一种二叉树数据结构,可高效地维护和查询区间和等信息。它将序列划分为多个区间,并使用递归构建的方式,利用线段树可以在O(logN)的时间复杂度内进行区间和查询和更新。

2.区间修改的懒惰标记:在进行区间修改时,利用懒惰标记技术可以将修改操作推迟到查询阶段进行,减少了修改操作的开销,提高查询效率。

3.压缩线段树:压缩线段树是一种优化后的线段树结构,它将相邻的相同区间的节点合并,从而减少了树的节点数和空间开销,提高了查询和更新的效率。

滑动窗口的实时更新

1.双指针法:双指针法是一种线性扫描算法,利用两个指针分别指向区间的左右边界,通过移动指针来更新窗口内的信息,从而保持实时更新窗口和。

2.线段树维护区间和:将区间和信息维护在线段树中,当窗口移动时,可以利用线段树的查询和更新操作高效地更新受影响区间的和。

3.离线算法:对于一些离线场景,可以通过预处理和排序的方法,将滑动窗口问题转化为批量查询和更新问题,再利用线段树等数据结构进行高效求解。

历史信息维护

1.时间戳线段树:利用时间戳线段树可以同时维护历史时间点上的区间和信息,从而查询任意时间段内的区间和。

2.树状数组的差分更新:通过差分更新技术,利用树状数组可以高效地更新指定时间段内的区间和,从而计算任意历史时间段的区间和。

3.动态规划与记忆化:对于一些场景,可以利用动态规划和记忆化技术,保存历史信息,以避免重复计算,实现历史信息的快速检索和查询。区间和的在线维护与复杂度优化

引言

树链剖分是一种数据结构,用于对树形结构进行有效且高效的查询和更新操作。在某些应用场景中,需要在线维护树上节点的区间和并在需要时进行查询。本文将探讨如何在树链剖分框架下实现区间和的在线维护,并针对时间复杂度进行优化。

算法描述

树链剖分基础

树链剖分将一棵树分解成若干条链,这些链具有以下性质:

*每条链上相邻节点之间的距离为1。

*每个节点属于且仅属于一条链。

*每条链都有一条指向父链的指向指针。

区间和的在线维护

在线维护区间和需要在tree上更新和查询区间和。

*更新:当一个节点的值发生变化时,需要递归更新其所有祖先节点的子树和。

*查询:给定两个节点u和v,需要计算u和v之间的路径上的区间和。

复杂度优化

路径压缩

在查询路径和时,需要沿路径遍历节点。可以使用路径压缩技术优化这一过程。路径压缩将每个节点的父节点指针直接指向该链的顶端节点。这可以显著减少路径长度,从而降低查询时间复杂度。

数列分解

在更新子树和时,区间的长度可能会很大。可以使用数列分解技术将大区间分解成较小的区间。通过将区间表示为若干个子区间的和,可以在更新时大幅减少操作次数。

时间复杂度

在优化后,区间和的在线维护和查询的时间复杂度为:

*更新:O(log^2N),其中N是树中的节点数

*查询:O(logN)

应用

在线维护区间和在许多实际应用中都有用,包括:

*动态规划:解决优化问题,例如最长公共子序列或背包问题。

*范围查询:高效查询给定范围内的元素的和或其他聚合结果。

*树上差分:维护树上节点的权重,以便在需要时高效地计算两个节点之间的差值。

示例代码(C++):

```cpp

intval;

intsubtree_sum;

Node*parent;

vector<Node*>children;

};

node->parent=parent;

node->subtree_sum=node->val;

dfs(child,node);

node->subtree_sum+=child->subtree_sum;

}

}

intdiff=new_val-node->val;

node->val=new_val;

node->subtree_sum+=diff;

node=node->parent;

}

}

intsum=0;

if(node1->parent==node2)returnsum+node1->subtree_sum;

sum+=node1->subtree_sum;

node1=node1->parent;

}

returnsum;

}

```

结论

在树链剖分框架下在线维护区间和是一种高效的技术,广泛应用于需要动态查询和更新树形结构上的元素和的场景。通过路径压缩和数列分解等优化,可以显著降低时间复杂度,提高算法效率。第六部分RMQ与区间和维护的结合树链剖分的优化算法:RMQ与区间和维护的结合

引入

树链剖分是一种经典的树形数据结构,用于解决树上区间查询和修改问题。其核心思想是将树形结构分解成一系列链状结构,从而简化查询和修改操作。

区间和维护

区间和维护是指维护树上区间和信息的算法。常见的区间和维护问题包括求和、求最大值和最小值等。

RMQ(区间最值查询)

RMQ(RangeMinimum/MaximumQuery)是一种经典的区间查询算法,用于求取一个区间内的最小值或最大值。

RMQ与区间和维护的结合

将RMQ和区间和维护相结合,可以实现高效地求取树上区间的和并进行更新操作。具体来说,可以将树上每个节点的子树和信息存储在RMQ数据结构中。

RMQ节点的构造

RMQ节点的构造过程如下:

1.将每个节点视为一个RMQ节点,其区间范围为该节点的子树。

2.对于每个节点的子节点,将其子树的和存储在该节点的RMQ节点中。

3.对于每个节点,将其RMQ节点与其父亲节点的RMQ节点合并,形成更大的区间和RMQ节点。

RMQ查询

RMQ查询过程如下:

1.给定一个查询区间,将其拆分为链上区间。

2.对于每个链上区间,查询该区间对应的RMQ节点的和信息。

3.将所有区间和信息相加,得到最终查询结果。

RMQ更新

RMQ更新过程如下:

1.给定一个节点的子树和信息更新,将其存储在该节点的RMQ节点中。

2.沿该节点向上回溯至根节点,更新所有经过节点的RMQ节点。

3.更新过程中,根据子节点和信息的更新情况,对RMQ节点的和信息进行相应修改。

算法复杂度

RMQ与区间和维护结合后的算法复杂度为:

*空间复杂度:O(nlogn),其中n为树的节点数。

*查询复杂度:O(logn)。

*更新复杂度:O(logn)。

应用场景

该算法广泛应用于处理树上查询和修改问题,例如:

*求取树上指定区间的和。

*更新树上指定区间的和。

*查询树上最大子树和的区间。

*查询树上两点之间的路径和。

示例

考虑以下树:

```

1

/\

23

/\\

456

```

按照上述算法构建RMQ数据结构:

*节点1的RMQ节点:区间[1,6],和为21。

*节点2的RMQ节点:区间[4,5],和为9。

*节点3的RMQ节点:区间[6],和为6。

*节点4的RMQ节点:区间[4],和为4。

*节点5的RMQ节点:区间[5],和为5。

查询

查询区间[2,5]的和:

*将[2,5]拆分为链上区间[2,4]和[5]。

*查询节点2的RMQ节点,和为9。

*查询节点5的RMQ节点,和为5。

*相加得到查询结果:14。

更新

更新节点4的子树和为10:

*更新节点4的RMQ节点,和为10。

*更新节点2的RMQ节点,和为19。

*更新节点1的RMQ节点,和为29。

结论

将RMQ与区间和维护相结合可以高效地处理树上区间查询和修改问题。该算法复杂度低,应用场景广泛,是常用的树形数据结构。第七部分树链剖分的扩展与应用场景关键词关键要点主题名称:重链剖分

1.将重边定义为子树大小不超过整棵子树大小的一半的边。

2.对于每条重边,将子树较大的端点作为其所在链的链顶。

3.每个结点的轻儿子链都连接到一个重儿子链。

主题名称:轻重链剖分

树链剖分的扩展与应用场景

#树链剖分的扩展

树链剖分算法具有一定的可扩展性,衍生出了多种扩展算法,以满足不同场景下复杂需求。其主要扩展包括:

轻重链剖分(HLD):

*将一个树中的重边和轻边分开处理,避免了无用路径的搜索,提高算法效率。

*适用于查询树中路径信息。

点分治(PointCentroidDecomposition):

*将一棵树分解为多个子树,使得每个子树的重心到其他子树重心的距离最小。

*适用于离线处理树上的询问,如最小生成树、最大独立集等问题。

树上莫队(TreeMo'sAlgorithm):

*将树划分为若干个区间,使用莫队算法对区间内询问进行优化。

*适用于树上的区间查询问题,如树上差分、路径查询等。

#树链剖分的应用场景

树链剖分算法在解决树形结构相关问题时具有广泛的应用场景,其优势主要体现在以下方面:

高效查询路径信息:

*树链剖分可以快速地求出树中任意两点之间的路径长度、经过边数、公共祖先等信息。

*适用于各种路径查询问题,如树的直径、最短路径、最大公共子树等。

维护动态树:

*树链剖分算法可以通过链式前向星的数据结构进行动态维护。

*适用于树结构不断变化的情况,如在线添加或删除边,查询树的连通性等。

树上区间查询:

*树链剖分扩展算法,如HLD和树上莫队,可以优化树上的区间查询问题。

*适用于求解树上区间和、最大值、最长公共子序列等问题。

树上离线处理:

*点分治算法可以离线处理树上的询问,避免了在线处理的复杂度瓶颈。

*适用于求解树上最短路径、最小生成树、最大匹配等问题。

其他应用场景:

*图的二分法:利用树链剖分算法可以将图转化为树,方便使用二分法解决图论问题。

*树上染色:利用树链剖分算法可以快速求解树上染色问题,如相邻染色数目最大化、染色区间长度最小化等。

*生物信息学:树链剖分算法可用于分析基因组序列,解决进化树重建、序列比对等问题。第八部分树链剖分的局限性与改进方向树链剖分的局限性

树链剖分是一种用于高效处理树形结构数据的算法,它具有时间复杂度低(O(logN))的优点。然而,它也存在一些局限性:

*空间占用高:树链剖分需要预处理树,创建表存储父节点、重儿子和链底,这可能会导致较高的空间占用,尤其是在树规模较大时。

*不支持动态树:树链剖分假设树结构保持不变,这意味着它不适合处理动态树,例如需要频繁添加或删除节点的情况。

*时间复杂度不稳定:树链剖分的算法性能取决于树的重路径分解结果,如果树的重路径分解不平衡,则算法的时间复杂度可能会退化为O(N),从而降低效率。

*对权重的支持有限:传统树链剖分不支持树边上的权重,这限制了其在某些场景中的应用,如最短路径或最大权独立集问题。

*修改不便:一旦对树进行树链剖分预处理,后续修改树结构(例如添加或删除节点)会变得复杂且效率低下。

改进方向

针对树链剖分的局限性,研究者提出了各种改进方法,旨在降低其时间复杂度、空间占用和修改难度,并扩展其功能:

*优化内存使用:通过使用位运算或其他空间优化技术,可以减少树链剖分表的大小,降低空间占用。

*支持动态树:开发了动态树链剖分算法,可以处理动态树上的查询和更新操作,而无需重新预处理整个树。

*改进时间复杂度:提出了各种启发式算法和数据结构,以改善树链剖分的性能,并将其时间复杂度稳定在O(logN)级别,即使对于不平衡的树也是如此。

*支持权重:引入了加权树链剖分算法,它支持树边上的权重,从而使其可以用于解决最短路径和其他加权树问题。

*优化修改效率:开发了懒惰更新和路径分裂等技术,以简化对树链剖分预处理后的树结构的修改操作,提高了算法在动态场景中的效率。

此外,还有一些正在进行的研究探索树链剖分的其他改进方向,例如:

*并行化:探索使用并行计算来加速树链剖分的预处理和查询操作。

*无预处理算法:开发不需要预处理树即可执行查询操作的树链剖分算法,从而降低时间和空间开销。

*扩展应用:将树链剖分应用于其他数据结构和算法,例如图论和动态规划,以解决更广泛的问题。关键词关键要点主题名称:树链剖分的概念

关键要点:

1.树链剖分是一种基于树形结构的数据结构,将一棵树分解为一系列链,称为重链。

2.重链是树中的一条路径,其上每个节点的子树大小都不超过其父亲节点子树大小的一半。

3.树链剖分的目的是将树中的任意两点之间的路径分解为重链和轻链,以便进行高效的查询和更新。

主题名称:树链剖分的应用

关键要点:

1.区间查询:树链剖分可以用于高效地查询树中两个节点之间的路径上所有节点的属性,例如节点权重、颜色等。

2.区间更新:树链剖分也可以用于高效地更新树中两个节点之间的路径上所有节点的属性,例如修改节点权重、颜色等。

3.最近公共祖先查询:树链剖分可以快速找到树中两个节点的最近公共祖先,即它们在树中最近的共有祖先节点。关键词关键要点树链剖分的优化算法:RMQ与区间和维护的结合

主题名称:RMQ与线段树维护

关键要点:

1.线段树是一种数据结构,可以高效地维护区间信息,例如最小值、最大值和区间和。

2.RMQ(区间最小/最大值查询)操作可以在线段树上高效实现,通过自上而下递归查询每个子区间,并返回最小/最大值所在的子区间。

3.

温馨提示

  • 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
  • 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
  • 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
  • 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
  • 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
  • 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
  • 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

评论

0/150

提交评论