Tarjan的各种操作

tarjan算法 算法介绍 如果两个顶点可以相互通达,则称两个顶点强连通(strongly connected)。如果有向图G的每两个顶点都强连通,称G是一个强连通图。有向图的极大强连通子图,称为强连通分量(strongly connected components)。 下图中,子图{1,2,3,4}为一个强连通分量,因为顶点1,2,3,4两两可达。{5},{6}也分别是两个强连通分量。 Tarjan算法是用来 阅读详情

最近比赛时做一道仙人掌的题就因为tarjan打错而WA0了,非常伤心,突然发现自己脑海中的tarjan真是一坨shit(我无意冒犯tarjan大神),所以去找了图论专题的PPT复习了一波。

dfn,low的含义在这里就不解释了。

有向图的tarjan:

有向图的tarjan只有一种用途,就是缩强联通分量。

2-SAT问题中也可以判合法性。

在有向图tarjan中,会遇到三种边:
1.树边
2.返祖边
3.横插边

横插边要无视掉。

当dfn[x] == low[x],的时候,就把栈里x及x以上的退栈,缩成一个点。

代码:

void dg(int x) {
    bd[x] = 1; d[++ d[0]] = x;
    dfn[x] = low[x] = ++ td;
    for(int i = final[x]; i; i = next[i])  {
        int y = to[i];
        if(!dfn[y]) dg(y), low[x] = min(low[x], low[y]); else
        if(bd[y]) low[x] = min(low[x], dfn[y]);
    }
    if(low[x] == dfn[x]) {
        for(; d[d[0]] != x; d[0] --)
            ff[d[d[0]]] = x, bd[d[d[0]]] = 0;
        d[0] --; ff[x] = x; bd[x] = 0;
    }
}

无向图tarjan:

无向图没有横插边。

第一种:

缩边双连通分量。

无向图的边双联通分量其实类似于有向图的强联通分量。

所以这个做法也差不多,只是要标记一下走过来的边是哪条,不能直接走回去。

这个的话一开始把边集数组的计数变量tot赋值为1,就可以用^1来判断。

代码:

void tar(int x, int la) {
    d[++ d[0]] = x; low[x] = dfn[x] = ++ td;
    for(int i = final[x]; i; i = next[i]) if(i != (la ^ 1)){
        int y = to[i];
        if(!dfn[y]) tar(y, i), low[x] = min(low[x], low[y]); else
        low[x] = min(low[x], dfn[y]);
    }
    if(dfn[x] == low[x]) {
        tz ++;
        do to[d[d[0]]] = tz; while(d[d[0] --] != x);
    }
}
第二种:

这种的作用是把仙人掌图搞成缩环树。

仙人掌图标志:任意一条边最多存在与一个简单环中

大概是dfs一下,把环上点的父亲设为环顶(第一次进入环的位置),环顶也可以视作在一个环上,它的父亲设为那个环顶的父亲。

这样缩了以后,处理一些信息(例如最短路)一般只用在lca处特判一下从哪边绕过去。

还是先求出low和dfn。

在仙人掌图中,一个点x,y是x的一个子节点。

如果low[y]>=dfn[x],则说明y上不去,则y的子图就被x隔开了,可以视x为环顶,fa[y]=x.

不然的话y上得去,fa[y] = fa[x]。

找桥点的话则不同,x只要有一个子节点y满足low[y]>=dfn[x],x就是一个桥点。

代码:

void tar(int x, int la) {
    low[x] = dfn[x] = ++ td;
    for(int i = final[x]; i; i = next[i]) if(i != (la ^ 1)){
        int y = to[i];
        if(!dfn[y]) tar(y, i), low[x] = min(low[x], low[y]); else
        low[x]  = min(low[x], dfn[y]);
    }
}
void tq(int x) {
    bz[x] = 1;
    for(int i = final[x]; i; i = next[i]) {
        int y = to[i]; if(bz[y]) continue;
        if(low[y] >= dfn[x]) fa[y] = x; else fa[y] = fa[x];
        tq(y);
    }
    bz[x] = 0;
}
第三种:

这个用来缩点双连通分量。

我们知道割点会存在于多个点双连通分量,所以缩点的话要新开点,并且退栈不要退了当前的点。

用于建圆方树。

Code:

void tar(int x, int la) {
    dfn[x] = low[x] = ++ tt;
    z[++ z[0]] = x;
    for(int i = e.final[x]; i; i = e.next[i]) {
        int y = e.to[i];
        if(!dfn[y]) {
            tar(y, i);
            low[x] = min(low[x], low[y]);
            if(low[y] >= dfn[x]) {
                td ++;
                while(z[z[0]] != y) e2.link(z[z[0] --], td);
                e2.link(z[z[0] --], td); e2.link(x, td);
            }
        } else if(i != (la ^ 1)) low[x] = min(low[x], dfn[y]);
    }
}
Tarjan算法详解(AcWing 1174 受欢迎的牛) 题目描述: 每一头牛的愿望就是变成一头最受欢迎的牛。 现在有 N 头牛,编号从 1 到 N,给你 M 对整数 (A,B),表示牛 A 认为牛 B 受欢迎。 这种关系是具有传递性的,如果 A 认为 B 受欢迎,B 认为 C 受欢迎,那么牛 A 也认为牛 C 受欢迎。 你的任务是求出有多少头牛被除自己之外的所有牛认为是受欢迎的。 输入格式 第一行两个数 N,M; 接下来 M 行,每行两个数 A,B,意思是 A 认为 B 是受欢迎的(给出的信息有可能重复,即有可能出现多个 A,B)。 输出格式 输出被除自己之外的 阅读详情

相关推荐

2024最新版Anaconda Navigator安装使用指南

本文简要介绍如何下载安装Anaconda Navigator最新版,以及如何使用Python内核搭载来完成应用程序开发。

jackson_lingua的博客 1万+

浅谈 Tarjan 算法

无向图中,若删去一条边会使得这个图的极大连通分量数增加,则该边被称为桥。也可以理解为无向图的一个连通块中,若删除一条边会使得至少两点之间无法相互到达,该边被称为桥。无向图中,若删去一个点会使得这个图的极大连通分量数增加,这个点被称为割点。也可以理解为无向图的一个连通块中,若删除一个点会使得至少两点之间无法相互到达,该点被称为割点。注意,强连通分量(SCC,Strongly Connected Components)是在单向图中的。强联通子图,定义为:在单向图中,该子图上的任意两点之间能互相到达。

William_Wang_的博客 5220

数字孪生变电站如何制作?虚拟现实项目强荐广州华锐互动

变电站数字孪生系统可以为提高变电站设备与环境的实时感知能力、在线诊断设备健康状态、促进设备隐藏故障定位和维修效率的提高、实现设备全生命周期提供有力支撑。通过对设备状态的准确评估,可以延长设备的生命周期,实现资产增值。1、3D可视化:建立可视化平台,集中展示所有3D模型信息、数据信息、环境信息和人员信息,包括设备数字模型、建筑外形及内部、周边地形、人员动态、天气、时间等。4、智能监控:采用先进的AI摄像头,通过设备的图像识别,自动智能分析图像,准确分析设备状态、运行动态、外围控制情况。...

gzvrnew的博客 776

Tarjan算法超超超详解(ACM/OI)(强连通分量/缩点)(图论)(C++)

深入浅出的Tarjan算法手把手讲解!看完就会!

qaqwqaqwq的博客 1万+

一文读懂医疗大模型测评基准

面对市场上浩若星海的大模型,医院管理者如何采购适合自身场景的解决方案?如何选取好的模型作为基础进行课题研究?都是医院需要特别重视的问题。评测基准则benchmark是这些问题的重要解法,国内北京、上海、浙江已然开展了相关的标准化工作。

dz102的博客 1841

搭建PX4开发系统(Ubuntu 22.04)

本文是《从零开始学 PX4 无人机开发》系列第二篇,适合开发者在 Ubuntu 系统下快速搭建 PX4 编译与仿真环境,支持 QGroundControl、Gazebo、MAVSDK 等完整工具链。

qq_15856721的博客 4202

Tarjan 算法学习笔记

支持度(Support)是指数据集DDD中包含某个项集XXX的记录所占的比例。SuppXfreqX∣D∣SuppX∣D∣freqX​其中freqXfreq(X)freqX表示包含XXX的记录数,∣D∣|D|∣D∣表示数据集DDD中记录的总数。置信度(Confidence)是指数据集DDD中包含项集XXX的记录中同时包含另一个项集YYY的比例。

m0_72410588的博客 1699

SolidWorks与Python二次开发实战:从宏录制到自动化脚本

本文详细介绍了利用Python对SolidWorks进行二次开发的实战方法。通过宏录制获取操作指令,再将其转换为Python脚本,工程师可以高效实现建模、出图等重复任务的自动化,显著提升设计效率。文章涵盖了环境搭建、代码转换、调试技巧及完整实战案例,为工程师提供了从入门到精通的完整路径。

weixin_29082143的博客 947

Tarjan( 系列3) 有向图中的缩点操作

Tarjan 是大佬的名字, 大佬一生发明了许多算法, 都叫 Tarjan, 我会渐渐整理出来, 想知道都有啥的话, 可以直接到我文章列表搜索 Tarjan.在 Tarjan 求得 scc 后, 对于每个点打上同样的 scc, 就可以很容易统计出每个 scc 的出度入度有哪些, 就完成了缩点.重温Tarjan, 网上看了许多博客感觉都讲的不清楚. 故传上来自己的笔记, 希望帮到大家.将有向图中的强连通分量缩成一个点, 权值具题而定.

taulee01 的博客 371

深度学习-161-Dify工具之对比使用工作流和聊天流生成图表可视化的html文件

分别使用聊天流和工作流进行数据分析结果的可视化,生成html文件。聊天流可以配置带记忆,这样就可以多次交互优化结果。

qq_20466211的博客 1709

【Python】-- 趣味代码 - 发牌游戏

Python -- 趣味代码 - 发牌游戏

银尘博客 351

HDU4547 CD操作(tarjan算法 离线LCA)

在Windows下我们可以通过cmd运行DOS的部分功能,其中CD是一条很有意思的命令,通过CD操作,我们可以改变当前目录。   这里我们简化一下问题,假设只有一个根目录,CD操作也只有两种方式:      1. CD 当前目录名\...\目标目录名 (中间可以包含若干目录,保证目标目录通过绝对路径可达)   2. CD .. (返回当前目录的上级目录)      现在给出当前目录和一个目标目录,请问最少需要几次CD操作才能将当前目录变成目标目录?

nka_kun的博客 546

4、海洋哺乳动物运动能量学:潜水与生存的奥秘

本文深入探讨了海洋哺乳动物在潜水与运动中的能量消耗机制,涵盖其生理反应、代谢成本、节能行为策略及测量方法。通过分析不同物种的能量利用特点,揭示了它们如何在极端水下环境中维持能量平衡,并讨论了该研究在保护生物学、生态系统动态和动物健康管理中的实际意义。文章还展望了未来多学科交叉、长期监测及应对环境变化的研究方向,为理解海洋哺乳动物的生存奥秘提供了系统性视角。

p5l2m9n4o6q的博客 116

Tarjan算法的操作原理

Tarjan算法的操作原理

不负韶华 458

RU DOS版、EFI版32bit/64bit BIOS常用工具

DOS版、EFI版的RU工具,可用来查看IO、MEM、PCI、SMBIOS等资源。亲测在EFI SHELL下可用。

深度学习工具包 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")

hdu 4547 CD操作 (tarjan离线LCA算法)

  在Windows下我们可以通过cmd运行DOS的部分功能,其中CD是一条很有意思的命令,通过CD操作,我们可以改变当前目录。   这里我们简化一下问题,假设只有一个根目录,CD操作也只有两种方式:      1. CD 当前目录名\...\目标目录名 (中间可以包含若干目录,保证目标目录通过绝对路径可达)   2. CD .. (返回当前目录的上级目录)      现在给出当前目录和一个目标目...

creator平 266

TMS_WebGMaps_1.9.8.0_Full_Source

TMS_WebGMaps_1.9.8.0_Full_Source 全源码 delphi cbuilder

tarjan算法找桥/链式向前星骚操作

我们知道当在一个搜索树上,存在一个x的子节点y,使 dfn[x] < low[y] 则得出(x,y)是原图的一个桥。在更新low[x]时,fa[x]的dfn必定小于x的,但是在没有重边的情况下,fa[x]不是x的子节点,所以不能用其来更新low[x],但是在用重边的时候是可以的。 所以最好的方法是记录入边的编号,而不是父节点的编号。我们又知道,在链式向前星的建图方式中,在习惯下,<...

平凡人Kalzn的博客 396

LinePhone3.2.7(android端最新版本) sip客户端

SIP客户端For android:LinePhone3.2.7(最新版本),官网地址:http://www.linphone.org/

hdu 4547 CD操作 【tarjan的LCA操作+map】

题目链接:http://acm.hdu.edu.cn/showproblem.php?pid=4547 思路:由于点很多所以需要邻接表存数据,先dfs记录每个点的深度,然后tarjan找到最近共公祖先,然后根据题意输出 这到题需要map来讲字符串转换成数字来记录; 父目录到子目录只需一步,子目录到父目录所需步数就是深度差,转成的目录不是父目录那么转成另一目录的步数就是到两者最近公共祖先的深度...

几许情愁的博客 138

【HDU 4547 CD操作】LCA问题 Tarjan算法

题目链接:http://acm.hdu.edu.cn/showproblem.php?pid=4547 题意:模拟DOS下的cd命令,给出n个节点的目录树以及m次查询,每个查询包含一个当前目录cur和一个目标目录tar,返回从cur切换到tar所要使用的cd命令次数: 注意这里的cd命令是简化版,只能进行如下两种操作:   1.cd .. ...

weixin_30654583的博客 181

图论-Tarjan

Tarjan缩点算法详解

2401_89046431的博客 652

CD操作 HDU - 4547 (LCA-离线tarjan)

思路: 按之前的思路每次查询都重新搜,发现TLE了,之后查了一下离线tarjan,是将所有的查询都先输入后,一次性处理,这样就达到了O (n+m)的复杂度 #include #include #include #include #include #include using namespace std; const int maxn= 200005; int fa[maxn]; int

GameRoad 359

模板—tarjan缩点

void tarjan(int x) { dfn[x]=++cnt;low[x]=cnt; vi[x]=1; stack[++top]=x; for(rint i=f(x);i;i=n(i)) if(!dfn[v(i)])tarjan(v(i)),low[x]=min(low[x],low[v(i)]); ...

weixin_30467087的博客 66

Tarjan算法

本文章转自:http://www.cnblogs.com/saltless. 说到以Tarjan命名的算法,我们经常提到的有3个,其中就包括本文所介绍的求强连通分量的Tarjan算法。而提出此算法的普林斯顿大学的Robert E Tarjan教授也是1986年的图灵奖获得者(具体原因请看本博“历届图灵奖得主”一文)。         首先明确几个概念。 强连通图。在一个强连

NNDXNM的专栏 608

强连通分量(tarjan算法)

强连通图: 在有向图中,由任意节点出发都可以到达其余所有节点,该图为强连通图。 强连通分量: 在非强连通图的有向图中,选取部分点为强连通图,该强连通子图称为强连通分量。 求出强连通分量可以进行缩点操作。 参考:图论——强连通分量(Tarjan算法) 例题:P2746 [USACO5.3]校园网Network of Schools 直接把tarjan算法作为模板 //tarjan #include<bits/stdc++.h> #define MAXN 1000 using namespace s

Khasehemwy的博客 361
上一篇: 【NOI2018模拟3.31】华胥梦天
下一篇: NTT(快速数论变换)和多项式求逆学习小记
Cold_Chair
博客等级 码龄11年 158粉丝 410原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

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

抵扣说明:

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

余额充值