拓扑排序优化

深入理解拓扑排序:从基础到应用 拓扑排序是图论中一项重要的算法,主要用于处理有向图中节点之间的依赖关系。这个概念源于日常生活中的任务排序需求,例如在工程项目中,不同任务之间存在先后顺序,某些任务必须在其他任务完成后才能开始。这种依赖关系的合理排序对于项目的进度和质量至关重要。 在图论中,拓扑排序解决的是有向图中节点的线性排序问题,使得图中任意一条有向边的终点在排序中都出现在起点之后。这种排序方式不仅有实际应用的需求,还在计算机科学领域中广泛应用于编译器优化、任务调度、依赖关系分析等方面。 阅读详情

之前就写过一篇关于拓扑排序的http://blog.youkuaiyun.com/monkey0le/article/details/7889725

今天参加某网络赛,其中有一题就是拓扑排序的,一看觉得开心,模板直接一放上去,TLE了,不开心。

后来才发现那种做法的复杂度是O(n^2)的,而且花费的空间也很大,于是做优化:

用临界表来保存每条边,拓扑排序的时候,把入度为0的点放入队列里面,同时,每次进行排序的时候,从队列里面取出入度为0的点,每次扩展也把入度为0的放进队列,于是把空间降到m,时间降到O(n+m),m是又向边的数量。

#include <iostream>
#include <vector>
#include <cstdio>
#include <queue>
using namespace std;
const int MAXN=100000+50;
vector<int> map[MAXN];
int dis[MAXN];//保存每个点的入度
int num[MAXN];

int main()
{
    int n,m;
    int a,b;
	queue<int> q;
    while(scanf ("%d%d",&n,&m) != EOF)
    {
        memset(map,0,sizeof(map));
        memset(dis,0,sizeof(dis));
		int i;
		for (i = 1; i <= n; i++)
		{
			map[i].clear();
		}
        for(i=1;i<=m;i++)
        {
            scanf ("%d%d",&a,&b);
			map[a].push_back(b);
			dis[b]++;
        }
        int index;
		bool ok = true;
        int k=0;
		int cnt = 0;

		for (i = 1; i <= n; i++)
		{
			if (dis[i] == 0)
			{
				q.push(i);
				num[cnt++] = i;
			}
		}

		while (!q.empty())
		{
			int index = q.front();
			q.pop();
			for (int j = 0; j < map[index].size(); j++)
			{
				dis[map[index][j]]--;
				if (dis[map[index][j]] == 0)
				{
					q.push(map[index][j]);
					num[cnt++] = map[index][j];
				}
			}
		}

		if (cnt == n)
		{
			for(i=0;i<cnt;i++)
			{
				printf(i?" %d":"%d",num[i]);
			}
		}
		else
		{
			printf ("-1");
		}
		printf ("\n");
    }
	return 0;
}


基于图形的算法优化:拓扑排序与深度遍历 拓扑排序:拓扑排序用于有向无环图(DAG),它为图中的每个顶点安排一个线性序列,使得每个有向边都指向一个从前面的顶点到后面的顶点。拓扑排序广泛应用于任务调度、编译器优化等领域,尤其在处理任务依赖关系时表现尤为重要。深度优先遍历(DFS):深度优先遍历是一种遍历图的算法,通过从某一顶点出发,沿着一条路径深入探索直到无法继续,再回溯并探索其他路径。DFS不仅用于图的遍历,也用于解决许多复杂问题,如寻找强连通分量、路径搜索、回溯算法等。 阅读详情

相关推荐

[用拓扑排序解决依赖关系问题]——实现任务优化和并行计算

然后,我们使用一个队列来存储入度为0的节点,并执行拓扑排序算法,不断从队列中弹出入度为0的节点,并将其邻居节点的入度减1。在并行计算中,我们可以根据任务的排序结果来确定任务的调度顺序,以最大限度地利用计算资源和提高计算效率。拓扑排序是一种线性排序算法,它将有向无环图(DAG)中的所有节点按照一定的顺序排列,使得所有的前驱节点都排在后继节点的前面。总结起来,拓扑排序是一种强大的算法,能够帮助我们解决任务间的依赖关系问题,实现任务的优化和并行计算。,即按照任务之间的依赖关系,将任务排序后的结果。

. 956

拓扑排序

拓扑排序此代码来自于我的队友kls ,原博客:dlkkill.top,拓扑排序,是一种按照一定的先后规则,来进行排序。 一个有向无环图(Directed Acyclic Graph简称DAG)G进行拓扑排序,是将G中所有顶点排成一个线性序列,使得图中任意一对顶点u和v,若边(u,v)∈E(G),则u在线性序列中出现在v之前。通常,这样的线性序列称为满足拓扑次序(Topological Order)

xqacmer 782

探索拓扑排序算法的实现与优化

本文详细介绍了拓扑排序算法的计算机表示及其内存布局,揭示了如何使用顺序存储和链式存储技术实现高效的拓扑排序。通过对算法步骤的深入分析,我们发现算法T不仅在理论上有其独到之处,而且在实际编码中也有许多值得借鉴的实践技巧。文章最后指出,尽管算法T已经非常高效,但未来还有更好的算法等待我们去发现。

weixin_34598113的博客 330

数据结构之拓扑排序

拓扑排序是对有向无环图(DAG)的一种线性排序,满足:(1)对于图中的每一条有向边(u → v),u在排序中总是位于v的前面(2)如果图中存在环,则无法进行拓扑排序。

ssjss66的博客 1055

PaddleOCR实战:如何在CentOS 8.5上搭建高性能OCR识别环境

本文详细介绍了在CentOS 8.5系统上搭建高性能PaddleOCR识别环境的完整指南。从系统环境准备、PaddlePaddle框架部署到PaddleOCR的定制化安装与性能优化,提供了针对生产环境的解决方案,包括GPU/CPU环境配置、内核参数调优及常见问题排查,帮助用户实现高效OCR识别。

weixin_29223603的博客 349

5分钟搞定mmdetection3d多模态推理可视化:从KITTI数据集到3D检测结果展示

本文提供了一份快速上手MMDetection3D进行多模态推理可视化的实战指南。文章详细介绍了从环境搭建、KITTI数据集准备,到模型选择、配置解析,再到执行多模态推理并生成3D检测结果可视化的完整流程,旨在帮助开发者在30分钟内快速验证模型并直观展示检测效果。

weixin_29051149的博客 248

拓扑排序入门

昨晚cf div3的F就是一道基本上可以说板子的拓扑排序的题目,没有做出来感觉图论很早之前就看了,但是基本没有刷过什么题,开始补一下图论相关的知识点然后做点题目。

cx1的博客 1815

VESC电调高级调参指南:电机校准与性能优化实战解析

本文详细解析了VESC电调的高级调参方法,包括电机校准与性能优化实战技巧。从基础参数设置到高级机械参数优化,再到动态性能调优,提供了全面的调参指南。特别针对电机类型、功率设置、电池参数配置等关键环节给出实用建议,帮助用户充分发挥VESC电调的性能潜力。

weixin_30772105的博客 196

多式联运路径优化问题:基于拓扑排序的遗传算法染色体编码

在图论中,拓扑排序(Topological Sorting)是一个有向无环图(DAG, Directed Acyclic Graph)的所有顶点的线性序列。【注】:有向无环图(DAG)才有拓扑排序,非DAG图没有拓扑排序一说。例如,下面这个图,它是一个 DAG 图,那么如何写出它的拓扑排序呢?

博客简介 832

基于STM32设计的智能防盗单车锁_349

本设计基于STM32F103RCT6单片机,研制了一种适用于户外环境的智能防盗单车锁系统。系统集成了GPS定位模块、ADXL345加速度传感器、4G通信模块(Air780E)、OLED显示屏、继电器模拟锁控模块等硬件,通过姿态感知实现车辆异常移动检测,在锁车状态下自动触发蜂鸣器报警并通过短信与APP通知用户。

866

Flutter框架GetX从入门到精通第二篇:路由管理-告别繁琐的Navigator

Flutter框架GetX从入门到精通第二篇:告别繁琐的Navigator。本系列将带你从零开始,一步步掌握 GetX 框架的核心功能与实战技巧。

鹏多多的博客 170

Android 启动优化(二) - 拓扑排序的原理以及解题思路

春节之前,更新了一篇博客Android 启动优化(一) - 有向无环图,反响还不错,今天,让我们一起来看一下,怎样用代码实现有向无环图。这篇博客从实战的角度出发,介绍了有向无环图的两种解法,入度表法和 DFS 法。其中,入度表法很重要,必须掌握。下一篇,我们将从 项目实战的角度来讲解,怎样搭建一个有向无环图的通用框架,敬请期待。

IT徐师兄 287

YOLOv5改进系列(4)——添加ECA注意力机制

手把手教你在YOLOv5中加入ECA注意力机制,文内含两种方法,小白也能看懂!

路人贾的博客 8546

图结构中的环检测算法与拓扑排序优化的技术5

并查集(Union-Find)方法。广度优先搜索(BFS)与入度统计。定义与性质(DAG的必要条件)深度优先搜索(DFS)方法。基于BFS的Kahn算法。基于DFS的拓扑排序。动态环检测的拓扑排序。

ykkaka的博客 884

【Burp入门第二篇】Chrome配置BurpSuite代理教程

1、配置Burp代理为127.0.0.1:80802、扩展商店添加插件switchyomega,修改服务器和端口为下图:3、打开代理,选择刚才添加的代理

等风来 8368

事件驱动的 SAP 工作流:从 BOR 事件到 Event Linkage 的落地与排障全景图

摘要: SAP工作流中的Event是业务对象状态变化的系统广播机制,如发票录入、采购订单释放等事件。通过事件驱动,业务程序与流程引擎解耦,业务只需发布事件,流程引擎负责后续处理。文章详细解析了SAP工作流事件的完整链路,包括事件定义、触发机制、事件容器传递、SWE2配置的关键作用,以及事件不触发时的排查方法。重点介绍了事件在启动流程、终止任务、等待步骤和主动创建中的应用,并结合采购订单审批案例说明事件的实际使用场景和配置要点。

2007 年 ~ 2025 年,深耕 SAP 技术 18 年 187

一线大厂资深APP性能优化系列(二)异步优化与拓扑排序

executorService.submit(new Runnable() { @Override public void run() { initJPushInterface(); } }); executorService.submit(new Runnable() { @Override public void run() { initShareSDK(); } }); try { latch.await(); } catch (InterruptedException e) { e.printSta

m0_66264819的博客 112

数学建模模型总结

这是本人在两年内准备参加数学建模竞赛搜集到的模型资料,已经经过了本人的筛选和整理,希望能够对准备参加数学建模竞赛的学弟学妹们提供一些帮助!

hiho一下 第四十八周 拓扑排序·二【拓扑排序的应用 + 静态数组 + 拓扑排序算法的时间优化】...

题目1 : 拓扑排序·二 时间限制:10000ms 单点时限:1000ms 内存限制:256MB 描述 小Hi和小Ho所在学校的校园网被黑客入侵并投放了病毒。这事在校内BBS上立刻引起了大家的讨论,当然小Hi和小Ho也参与到了其中。从大家各自了解的情况中,小Hi和小Ho整理得到了以下的信息: 校园网主干是由N个节点(编号1..N)组成,这些节点之间有...

weixin_30488313的博客 125

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

SAP B1中文培訓教材_SDK

公司内部培训资料,对开发工具 ,DIAPI, UIAPI,Add-ON有详细解说

离散化、拓扑排序、最短路堆优化

提示:文章写完后,目录可以自动生成,如何生成可参考右边的帮助文档 离散化、拓扑排序以及最短路优化离散化拓扑排序图的链式前向星存储最短路的堆优化 离散化 数据范围太大,自身无法作为数组的下标保存对应的属性,当数据至于他们之间的相对大小有关,而与具体值无关时,则可以进行离散化。 做法:不改变数据相对大小的前提下,对数据进行缩小 struct node { int val;//原始下标 int order;// 真实数值 }a[100001];从小到大排序 b[100001] for(i=1;

FNbaby的博客 486

汉书HE8,好用的汇编代码编写工具

汉书HE8,好用的汇编代码编写工具早期编写汇编代码所用功能强大

算法训练重点突破:BFS 拓扑排序的复杂度分析与优化

BFS拓扑排序的时间复杂度为$O(V + E)$,空间复杂度为$O(V)$,是理论最优的。通过数据结构优化(如deque)、提前环检测和并行处理,可以进一步提升实际性能。理解复杂度推导:确保掌握$O(V + E)$的来源。实践优化:在代码中实现上述策略,并测试不同图规模。应用场景:拓扑排序常用于任务调度、依赖解析等,优化后能处理更大规模数据。通过此分析,你应该能更自信地应对相关算法问题。继续练习,强化BFS和图论基础!

2501_93893657的博客 621

Codeforces 919D Substring (拓扑排序-队列优化+ DP)

题目链接 题意:给出一个n和m,表示n个点m条边,再给出一个字符串s,s[i]表示第i个点的为小写字母c. 随后给出m行u,v表示单向边u-&gt;v. 求顺着任意路径走某个字母出现的次数的最大值,若存在环,则输出-1 Eg: input: 5 4 abaca 1 2 1 3 3 4 4 5 output: 3 (即1-&gt;3-&gt;4-&gt;5...

Fushicho_XF的博客 566

[POI2015][bzoj4383] Pustynia [线段树优化建图+拓扑排序]

题面 bzoj权限题传送门 luogu传送门 思路 首先,这个题目显然可以从所有小的点往大的连边,然后如果没环就一定可行,从起点(入读为0)开始构造就好了 但是问题来了,如果每个都连的话,本题中边数是$O(n^2)$级别的,显然会挂 发现两条性质: 1.所有的限制条件中,给定的总点数不超过3e5个 2.是一个点比一段区间大 第二个条件决定了我们可以利用线段树优化建图,而第一个条件告诉了我...

144

拓扑排序算法在工作流审批轨迹预测优化中的应用

通过拓扑排序算法对工作流中的任务依赖关系进行处理,如果最终得到的拓扑排序结果中的任务数量与工作流中总任务数量不一致,就说明工作流中存在循环依赖,该工作流不合法;​ 通过数学建模就可以发现,在同意审批参数中,我们的工作流就是一个特殊的有向无环图,入度为0的节点只有一个工作流定义中的开始节点、出度为0的节点也只有一个工作流结束节点。在 OA 系统中,用户可以自定义各种工作流。虽然拓扑排序得到的是一个线性序列,但可以根据任务之间的依赖关系,找出不相互依赖的任务,将它们并行执行,从而提高 OA 工作流的执行效率。

weixin_43578751的博客 873

Android 启动优化(二) - 拓扑排序的原理以及解题思路,android编程

示例 2 1输入: 4, [[1,0],[2,0],[3,1],[3,2]] 2输出: [0,1,2,3] or [0,2,1,3] 3解释: 总共有 4 门课程。要学习课程 3,你应该先完成课程 1 和课程 2。并且课程 1 和课程 2 都应该排在课程 0 之后。 4     因此,一个正确的课程顺序是 [0,1,2,3] 。另一个正确的排序是 [

m0_64319298的博客 671

2019 ICPC 银川区域赛 Delivery Route(spfa优化,拓扑排序+dijkstra)

Pony is the boss of a courier company. The company needs to deliver packages to nn offices numbered from 11 to nn. Especially, the ss-th office is the transfer station of the courier company. There ar...

tomjobs的博客 723
上一篇: Nim取子游戏
下一篇: 再谈Trie-字典树
WellerZhao
博客等级 码龄15年 11粉丝 28原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

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

抵扣说明:

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

余额充值