并查集的路径压缩上的一些操作

数据结构之并查集:按秩合并与路径压缩优化 并查集 1.并查集描述 一些有NNN个元素的集合应用问题中,我们通常是在开始时让每个元素构成一个单元素的集合,然后按一定顺序将属于同一组的元素所在的集合合并,其间要反复查找一个元素在哪个集合中。 为了快速解决这些问题,便有了并查集的概念。 并查集维护了一个不相交的动态集的集合S1,S2,⋯ ,Sn{S_1,S_2,\cdots,S_n}S1​,S2​,⋯,Sn​,每个集合将有一个"首领"来标识该集... 阅读详情

题意

如果Y不在X所在的对立里的话,将Y所在的队列插入到X所在的队列后面,并询问某个人后面有多少人。

题解

使用并查集,将一个队伍插入到另一个队伍后面,将会改变一个队伍里面某个人后面的人数值,如果暴力修改很耗时间,所以采用并查集的做法,两个队伍合并的时候,将X的队尾连上Y的队头,这时候知道X的后面的人数便是Y里面的人数,那X队伍里面的人呢?这时候就用到了并查集路径压缩的过程。
在这里插入图片描述
在路径压缩的过程中,首先先记录下此时的pre[x],例如要压缩3的路径,pre[x] = find(pre[x]),压缩后pre[3] = 1,但是压缩的过程是会经过2的,首先在pre[x] = find(pre[x])之前记录下当前的pre[x] = 2,当pre[x] = find(pre[x])结束后,2结点的值已经被1结点更新了,所以这时可以将2结点的信息再更新到3上面。

ans[i]: i后面有多少人, num[i]: i所在的队列有多少人

    int fx = find(x), fy = find(y);
    if(fx != fy) {
        pre[fx] = fy;
        ans[fx] = num[fy];
        num[fy] += num[fx];
    }
int find(int x) {
    if(x == pre[x])
        return x;
    int tmp = pre[x];
    pre[x] = find(pre[x]);
    ans[x] += ans[tmp];
    return pre[x];
}
合成孔径雷达Chirp Scaling(CS)算法MATLAB仿真实现 本人也是初学《合成孔径雷达成像算法与实现》,在GitHub上下载的关于CS算法的代码,仔细读了读,发现中间有一些不合理之处,动手改了一改,重新写了一个代码供初学者学习,有什么问题留言即可。 非常感谢源代码的作者,虽然中间有少许不正确的地方,但是对我理解cs算法的帮助非常大,非常感谢!!! 代码中提到的(4.31)这种均是在《合成孔径雷达成像算法与实现》中的公式 以下是MATLAB的仿真程序,直接复... 阅读详情

相关推荐

机械工程师如何用Codex实现CAD自动化:从重复劳动到智能设计

在机械设计领域,CAD二次开发长期面临学习门槛高、维护成本大的难题。随着AI编程助手如Codex的出现,通过自然语言生成可执行代码,工程师无需精通编程即可实现图纸批量处理、BOM表自动生成、参数化建模等任务。这种技术将重复性操作自动化,显著提升设计效率,让工程师聚焦于核心创新。应用场景涵盖批量修改图纸属性、跨软件数据流转、自动打印等。本文分享机械工程师利用Codex落地自动化的实战经验与避坑指南。

weixin_32296621的博客 358

并查集+路径压缩

并查集是一种树型的数据结构,用于处理一些不相交集合的合并及查询问题(即所谓的并、查)。比如说,我们可以用并查集来判断一个森林中有几棵树、某个节点是否属于某棵树等。 并查集两个操作“并”和“查”:并:将两个集合合并查:询问两个数是否在一个集合中 (1)初始化。定义数组int s[]是以结点i为元素的并查集,开始的时候,还没有处理点与点之间的朋友关系,所以每个点属于独立的集,并且以元素i的值表示它的集s[i],例如元素1的集s[1]=1。   下面是图解,左边给出了元素与集合的值,右边画出了逻辑关系。为了.

qq_52200998的博客 3520

系统磁盘从MBR格式转换成GPT格式来升级win11

之前的《》中说到,需要把磁盘格式转化为MBR格式才能执行下去。问题是,win10升级win11要求启动方式为UEFI的话,磁盘格式不能为MBR。其实不升级也不影响啥,但是就是想好看点。所以花了点时间折腾了一下。我这是双系统,所以直接去A系统修复B系统的磁盘格式和引导。

qq_42520962的博客 9041

【数据结构】并查集(路径压缩)

并查集

The porters of knowledge 2643

基于YOLOv5的隧道衬砌缺陷智能检测系统

计算机视觉在工程检测领域正发挥越来越重要的作用,特别是目标检测技术通过深度学习算法实现了对复杂场景的智能分析。YOLOv5作为当前主流的目标检测框架,通过改进网络结构和训练策略,可以显著提升检测精度和效率。在隧道工程领域,结合通道注意力机制和多尺度特征融合技术,能够有效解决衬砌缺陷识别中的小目标检测难题。这种AI检测系统相比传统人工判读地质雷达图像,不仅将效率提升20倍,还能将识别准确率提高到92.3%,特别适用于3cm以上结构缺陷的自动化检测。系统通过深度可分离卷积等优化,实现了模型轻量化,便于在边缘计算

weixin_29064103的博客 326

别再硬拔了!用这3个终端命令轻松搞定Mac上移动硬盘‘被程序占用’的问题

本文介绍了3个终端命令解决Mac上移动硬盘‘被程序占用’的问题,包括使用`diskutil list`定位硬盘、`lsof`查找占用进程以及`diskutil unmount`安全卸载。这些方法能有效避免数据风险,提升操作效率,特别适合开发者和技术爱好者。

weixin_33507732的博客 293

并查集最重要的优化:路径压缩

路径压缩其实就是把一条线上的所有点的祖先尽可能的往上,依次来减少搜索的次数。此时已知祖先了,接下来就是把这条线上所有的节点的父节点都变成此时的x。如果我们直接find(a),就起不到把过程中的所有父节点都统计的作用了。因为我们优化的是find函数,所以我们先写一个find2。这样的路径压缩就会把时间复杂度从O(n)直线编程O(1)今天我们要来说另一种对并查集的优化:路径压缩。这样的话,共搜索次数为3次了,大大减少了时间。如果用我们刚才说的路径压缩的思想呢?这样,寻找c的搜索次数便可将至1次。

lsy201009的博客 2094

汽车OTA自动化测试解决方案

目前OTA远程升级技术已成为众多汽车制造商的标配。由于OTA升级可能会带来潜在的风险(特别是包含ECU固件更新的FOTA升级),针对OTA系统的测试过程就尤为重要。

东舟技术的博客 7759

并查集路径压缩(C++)

一、并查集:查找元素互相关联的集合 Keep Learning 34days; 合并:合并两个集合 查找:判断两个元素是否在一个集合 1、利用数组 father[] int father[N]; //表示元素i的最高父亲节点(根节点) 如果father[i] = i,说明i是其集合的 根节点(最高点) 2、开始每一个元素都是自己单独一个集合,令father[i] = i; for(int i = 0;i <= n;i++) father[i] = i; 3、查找:由于每个集合只能有一个根

Kyrie_irving_kun的博客 2553

SpringBoot4+Java21前后端分离架构项目脚手架

本文介绍了基于SpringBoot 4和Java 21的前后端分离项目架构方案。主要内容包括:1)采用Spring Security 7实现JWT无状态认证和RBAC权限控制;2)后端使用MyBatis-Plus简化数据库操作,前端采用Vue3+Pinia组合;3)详细的项目结构设计,推荐按业务模块分包;4)核心依赖配置和架构设计图,涵盖认证授权流程。该方案结合最新技术栈,提供了生产级的全链路实现,特别适合需要快速构建现代化Web应用的项目。

Hello, New World! 421

华为OD机试真题 新系统-字符串格式调整(C/C++/Py/Java/Js/Go)

华为OD机试 新系统真题【字符串格式调整】,提供C语言、Java、C++、Python、Go、JavaScript源码实现,并提供完整思路讲解,以及在线OJ模拟做题。华为OD机试真题【字符串格式调整】多语言题解

qq_45776114的博客 1141

数据结构 - 并查集路径压缩

并查集是一种用于管理一组不相交集合的数据结构,常用于解决连通性问题。在并查集中,路径压缩是一种重要的优化技术,它能够显著提高查找操作的效率。本文将深入探讨并查集路径压缩的基本原理,并通过具体的Java代码详细说明如何实现高效的路径压缩。

菜鸟小码的博客 1739

【前端基础篇】HTML5 + CSS3 入门知识

,HTML5和CSS3核心知识

前端知识分享喵 2982

并查集的基本操作,Find的路径压缩,Union的按秩合并

并查集的基本操作

sl824200的博客 878

锂电池充电器电路设计 里面有电路

锂电池充电器电路设计 里面有电路 3.7V升压到5V电路设计。

IEM模型,地表粗糙度模拟

利用微波反演土壤水分时候,利用IEM模型可以实现对随机地表的模拟

并查集:基本操作、路径压缩

并查集基本知识

最不正经的计算机专业学生 726

最新的sdio 4.0 spec 协议标准 带书签 高清完整PDF版

Part-E1-SDIO-Specification-Ver4.00-Final-120220.pdf:最新的sdio 4.0 spec 协议标准 带书签 高清完整PDF版,包括SDIO 接口的外设,SDIO 接口官方协议等。

并查集及其路径压缩浅析

并查集(一种技巧) 实用的树形数据结构 主要处理不相交集合的查询与合并 选出集合中的某个元素为代表,集合中具体包含哪些元素不重要 将如下一系列操作复杂度降到常数级: 对于给定的元素,可以很快找到该元素所在集合 可以很快合并两个元素所在集合 用树根当一系列数字的代表 初始化函数的目的是使每个元素都是以自身为代表 表示: 不交集森林把每一个集合以一棵树表示,每一个节点即是一个元素。节点保存着到它的父节点的引用,树的根节点则保存一个空引用或者到自身的引用或者其他无效值,以表示自身为根节点。这个数据结构最

lin3ux的博客 1520

深度学习工具包 DeepLearningToolbox

深度学习工具包Deprecation notice.-----This toolbox is outdated and no longer maintained.There are much better tools available for deep learning than this toolbox, e.g. [Theano](http://deeplearning.net/software/theano/), [torch](http://torch.ch/) or [tensorflow](http://www.tensorflow.org/)I would suggest you use one of the tools mentioned above rather than use this toolbox.Best, Rasmus.DeepLearnToolbox================A Matlab toolbox for Deep Learning.Deep Learning is a new subfield of machine learning that focuses on learning deep hierarchical models of data.It is inspired by the human brain's apparent deep (layered, hierarchical) architecture.A good overview of the theory of Deep Learning theory is[Learning Deep Architectures for AI](http://www.iro.umontreal.ca/~bengioy/papers/ftml_book.pdf)For a more informal introduction, see the following videos by Geoffrey Hinton and Andrew Ng.* [The Next Generation of Neural Networks](http://www.youtube.com/watch?v=AyzOUbkUf3M) (Hinton, 2007)* [Recent Developments in Deep Learning](http://www.youtube.com/watch?v=VdIURAu1-aU) (Hinton, 2010)* [Unsupervised Feature Learning and Deep Learning](http://www.youtube.com/watch?v=ZmNOAtZIgIk) (Ng, 2011)If you use this toolbox in your research please cite [Prediction as a candidate for learning deep hierarchical models of data](http://www2.imm.dtu.dk/pubdb/views/publication_details.php?id=6284)```@MASTERSTHESIS\{IMM2012-06284, author = "R. B. Palm", title = "Prediction as a candidate for learning deep hierarchical models of data", year = "2012",}```Contact: rasmusbergpalm at gmail dot comDirectories included in the toolbox-----------------------------------`NN/` - A library for Feedforward Backpropagation Neural Networks`CNN/` - A library for Convolutional Neural Networks`DBN/` - A library for Deep Belief Networks`SAE/` - A library for Stacked Auto-Encoders`CAE/` - A library for Convolutional Auto-Encoders`util/` - Utility functions used by the libraries`data/` - Data used by the examples`tests/` - unit tests to verify toolbox is workingFor references on each library check REFS.mdSetup-----1. Download.2. addpath(genpath('DeepLearnToolbox'));Example: Deep Belief Network---------------------```matlabfunction test_example_DBNload mnist_uint8;train_x = double(train_x) / 255;test_x = double(test_x) / 255;train_y = double(train_y);test_y = double(test_y);%% ex1 train a 100 hidden unit RBM and visualize its weightsrand('state',0)dbn.sizes = [100];opts.numepochs = 1;opts.batchsize = 100;opts.momentum = 0;opts.alpha = 1;dbn = dbnsetup(dbn, train_x, opts);dbn = dbntrain(dbn, train_x, opts);figure; visualize(dbn.rbm{1}.W'); % Visualize the RBM weights%% ex2 train a 100-100 hidden unit DBN and use its weights to initialize a NNrand('state',0)%train dbndbn.sizes = [100 100];opts.numepochs = 1;opts.batchsize = 100;opts.momentum = 0;opts.alpha = 1;dbn = dbnsetup(dbn, train_x, opts);dbn = dbntrain(dbn, train_x, opts);%unfold dbn to nnnn = dbnunfoldtonn(dbn, 10);nn.activation_function = 'sigm';%train nnopts.numepochs = 1;opts.batchsize = 100;nn = nntrain(nn, train_x, train_y, opts);[er, bad] = nntest(nn, test_x, test_y);assert(er < 0.10, 'Too big error');```Example: Stacked Auto-Encoders---------------------```matlabfunction test_example_SAEload mnist_uint8;train_x = double(train_x)/255;test_x = double(test_x)/255;train_y = double(train_y);test_y = double(test_y);%% ex1 train a 100 hidden unit SDAE and use it to initialize a FFNN% Setup and train a stacked denoising autoencoder (SDAE)rand('state',0)sae = saesetup([784 100]);sae.ae{1}.activation_function = 'sigm';sae.ae{1}.learningRate = 1;sae.ae{1}.inputZeroMaskedFraction = 0.5;opts.numepochs = 1;opts.batchsize = 100;sae = saetrain(sae, train_x, opts);visualize(sae.ae{1}.W{1}(:,2:end)')% Use the SDAE to initialize a FFNNnn = nnsetup([784 100 10]);nn.activation_function = 'sigm';nn.learningRate = 1;nn.W{1} = sae.ae{1}.W{1};% Train the FFNNopts.numepochs = 1;opts.batchsize = 100;nn = nntrain(nn, train_x, train_y, opts);[er, bad] = nntest(nn, test_x, test_y);assert(er < 0.16, 'Too big error');```Example: Convolutional Neural Nets---------------------```matlabfunction test_example_CNNload mnist_uint8;train_x = double(reshape(train_x',28,28,60000))/255;test_x = double(reshape(test_x',28,28,10000))/255;train_y = double(train_y');test_y = double(test_y');%% ex1 Train a 6c-2s-12c-2s Convolutional neural network %will run 1 epoch in about 200 second and get around 11% error. %With 100 epochs you'll get around 1.2% errorrand('state',0)cnn.layers = { struct('type', 'i') %input layer struct('type', 'c', 'outputmaps', 6, 'kernelsize', 5) %convolution layer struct('type', 's', 'scale', 2) %sub sampling layer struct('type', 'c', 'outputmaps', 12, 'kernelsize', 5) %convolution layer struct('type', 's', 'scale', 2) %subsampling layer};cnn = cnnsetup(cnn, train_x, train_y);opts.alpha = 1;opts.batchsize = 50;opts.numepochs = 1;cnn = cnntrain(cnn, train_x, train_y, opts);[er, bad] = cnntest(cnn, test_x, test_y);%plot mean squared errorfigure; plot(cnn.rL);assert(er<0.12, 'Too big error');```Example: Neural Networks---------------------```matlabfunction test_example_NNload mnist_uint8;train_x = double(train_x) / 255;test_x = double(test_x) / 255;train_y = double(train_y);test_y = double(test_y);% normalize[train_x, mu, sigma] = zscore(train_x);test_x = normalize(test_x, mu, sigma);%% ex1 vanilla neural netrand('state',0)nn = nnsetup([784 100 10]);opts.numepochs = 1; % Number of full sweeps through dataopts.batchsize = 100; % Take a mean gradient step over this many samples[nn, L] = nntrain(nn, train_x, train_y, opts);[er, bad] = nntest(nn, test_x, test_y);assert(er < 0.08, 'Too big error');%% ex2 neural net with L2 weight decayrand('state',0)nn = nnsetup([784 100 10]);nn.weightPenaltyL2 = 1e-4; % L2 weight decayopts.numepochs = 1; % Number of full sweeps through dataopts.batchsize = 100; % Take a mean gradient step over this many samplesnn = nntrain(nn, train_x, train_y, opts);[er, bad] = nntest(nn, test_x, test_y);assert(er < 0.1, 'Too big error');%% ex3 neural net with dropoutrand('state',0)nn = nnsetup([784 100 10]);nn.dropoutFraction = 0.5; % Dropout fraction opts.numepochs = 1; % Number of full sweeps through dataopts.batchsize = 100; % Take a mean gradient step over this many samplesnn = nntrain(nn, train_x, train_y, opts);[er, bad] = nntest(nn, test_x, test_y);assert(er < 0.1, 'Too big error');%% ex4 neural net with sigmoid activation functionrand('state',0)nn = nnsetup([784 100 10]);nn.activation_function = 'sigm'; % Sigmoid activation functionnn.learningRate = 1; % Sigm require a lower learning rateopts.numepochs = 1; % Number of full sweeps through dataopts.batchsize = 100; % Take a mean gradient step over this many samplesnn = nntrain(nn, train_x, train_y, opts);[er, bad] = nntest(nn, test_x, test_y);assert(er < 0.1, 'Too big error');%% ex5 plotting functionalityrand('state',0)nn = nnsetup([784 20 10]);opts.numepochs = 5; % Number of full sweeps through datann.output = 'softmax'; % use softmax outputopts.batchsize = 1000; % Take a mean gradient step over this many samplesopts.plot = 1; % enable plottingnn = nntrain(nn, train_x, train_y, opts);[er, bad] = nntest(nn, test_x, test_y);assert(er < 0.1, 'Too big error');%% ex6 neural net with sigmoid activation and plotting of validation and training error% split training data into training and validation datavx = train_x(1:10000,:);tx = train_x(10001:end,:);vy = train_y(1:10000,:);ty = train_y(10001:end,:);rand('state',0)nn = nnsetup([784 20 10]); nn.output = 'softmax'; % use softmax outputopts.numepochs = 5; % Number of full sweeps through dataopts.batchsize = 1000; % Take a mean gradient step over this many samplesopts.plot = 1; % enable plottingnn = nntrain(nn, tx, ty, opts, vx, vy); % nntrain takes validation set as last two arguments (optionally)[er, bad] = nntest(nn, test_x, test_y);assert(er < 0.1, 'Too big error');```[![Bitdeli Badge](https://d2weczhvl823v0.cloudfront.net/rasmusbergpalm/deeplearntoolbox/trend.png)](https://bitdeli.com/free "Bitdeli Badge")

算法基础--并查集(含路径压缩,按秩合并,删除操作)

并查集 定义 并查集是一种树型的数据结构,用于处理一些不相交集合(Disjoint Sets)的合并及查询问题。常常在使用中以森林来表示。 集就是让每个元素构成一个单元素的集合,也就是按一定顺序将属于同一组的元素所在的集合合并 作用 维护一个无向图的连通性,判断n个点m条边时最少加多少边可以连通所有点 判断在一个无向图中,两点间加边是否会产生环(最小生成树克鲁斯卡尔中有用到) 维护集合等操作 等...

weixin_43565960的博客 1320

并查集概念以及常见操作(合并、查找、路径压缩)————附带完整代码和示例

1 并查集 1.1 定义:一种维护集合的数据结构,Union(合并),Find(查找),Set(集合)。 1.2 操作: 合并:合并两个集合; 查找:判断两个元素是否为在一个集合 1.3 性质 并查集产生的每一个集合都是一棵树 2 操作 2.1 初始化 //初始化 void Init(int father[], int n){ for (int i = 0; i <= n; ...

韩江雪de 小屋 1182

并查集算法(二):路径压缩

《并查集路径压缩技术的Java实现与性能分析》 本文详细介绍了并查集数据结构及其路径压缩优化技术。并查集用于处理集合合并与查询问题,核心操作包括查找(find)和合并(union)。路径压缩通过在查找过程中将节点直接连接至根节点,有效降低树高,使时间复杂度从O(n)优化至近常数级。文章提供了完整的Java实现代码,包含按秩合并和路径压缩策略,并通过连通性测试验证其正确性。性能对比表明,路径压缩能显著提升查询效率,适合处理大规模数据集。通过理论与代码结合的方式,清晰展示了并查集的优化原理与实践价值。

一碗黄焖鸡三碗米饭的博客 1093

并查集路径压缩

路径压缩是并查集的一种优化技术,通过在查找操作中将路径上的节点直接连接到根节点,显著降低树的高度,使后续操作效率接近常数时间。研究表明,结合按秩合并后,平均时间复杂度可达O(α(n))。路径压缩特别适用于频繁查询场景,如Kruskal算法中的连通性检测,但在持久化并查集等特殊场景可能需要权衡。实现上只需在find函数中添加递归赋值即可完成优化。

m0_57545130的博客 977

hdu 5441 Travel(离线操作+并查集路径压缩)

题目链接: http://acm.hdu.edu.cn/showproblem.php?pid=5441 解题思路: 题目大意: 给你n个顶点,m条边的一个无向图,q个询问。对于每个询问x,将图中所有小于x的边拿出里啊,组成另外一个图,将一个点a到能 到另一个点b记为有序对, 然后让你找出这个图里面有多少个这样的有序对。 算法思想: 当时比赛的时候思维短路了。。。这题肯定是先将所

piaocoder 600

并查集以及路径压缩

并查集以及路径压缩 一、概念 并查集是一种树型的数据结构,他的思想是用一个数组表示了整片森林(parent),树的根节点唯一标识了一个集合,我们只要找到了某个元素的的树根,就能确定它在哪个集合里。他有两个操作: 合并(Union):把两个不相交的集合合并为一个集合。 查询(Find):查询两个元素是否在同一个集合中。这个确定方法就是不断向上查找找到它的根节点,它可以被用来确定两个元素是否属于同一子集。 二、操作 每一个集合用一棵树来表示。树根的编号就是整个集合的编号。每个节点存储它的父节点, paren

lizefeng1998的博客 1422

蓝桥杯必会知识点——并查集

本文系统讲解了并查集数据结构及其应用。从基础概念出发,详细说明并查集的初始化、查找(含路径压缩优化)和合并(含按秩合并优化)三大核心操作,提供完整Python实现模板(时间复杂度O(α(n)))。通过蓝桥杯典型例题(如求连通分量、最小连通集、可撤销操作等)演示实际应用,并给出扩展题目推荐。特别强调在普通场景使用路径压缩,而可撤销操作需保留原始结构。文章兼顾理论解析与代码实践,适合算法竞赛备考学习。

2302_78972332的博客 1007

并查集——路径压缩

关于Rank的优化 上文中我们已经对代码进行了几次优化,使得进行连接操作的时候,所形成的数长度尽量短,但同时也存在另一种情况:集合元素多,但是每个元素分别指向根节点,这样就只有两层(举例),那么就应该把这棵树的根节点指向另一棵树的根节点,就出现了所谓的“集合元素多,但是树长度短“的情况,因此,应当首先考虑树的长度,而非树的元素量。

draper__QYT的博客 865

算法与数据结构——并查集、种类并查集和带权并查集

并查集是一种树型的数据结构,用于处理一些不相交集合的合并及查询问题。并查集的思想是用一个数组表示了整片森林(parent),树的根节点唯一标识了一个集合,我们只要找到了某个元素的的树根,就能确定它在哪个集合里。

qq_56639722的博客 3074

数据结构--并查集的进一步优化

压缩路径−−Find操作,先找到根节点,再将查找路径上所有结点都挂到根结点下每次Find操作,先找根,再“压缩路径”,可使树的高度不超过Oαn))。αn是一个增长很缓慢的函数,对于常见的n值,通常αn≤4,因此优化后并查集的Find、Union操作时间开销都很低。

m0_60593173的博客 751
上一篇: P1052 过河(状态压缩dp)
下一篇: CCF 地铁修建(起点到终点的路径中最大边最小)
Link_Ray
博客等级 码龄9年 44粉丝 156原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

当前余额3.43元 前往充值 >
需支付:10.00元
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付元
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值