第十一章例题 UVa753 A Plug for UNIX

UVA - 753:A Plug for UNIX UVA-753:A Plug for UNIX 来源:UVA 标签:图论->网络流->最大流问题 参考资料: 相似题目: 题目 You are in charge of setting up the press room for the inaugural meeting of the United Nations Internet... 阅读详情

       “完全不知,往日为何,能与我……”

好吧我想说完全不知道为什么我觉得这几天对图论的学习都很有意思,学起来又酷又炫的~

刘汝佳大神的源码我会放在后面。

/*SE:wn------王宁*/
/*回过头去学二分图匹配的匈牙利算法,才发现原来这一题就是二分图匹配啊
关键的一点就是这个转换器是给带插头的设备使用的

有点,有边——int n,m;
要知道和点连接的边——void addedge()——在增加边的时候要改变m的值
然后要把点和边联系起来+定义edge结构体起点终点容量流量
要能够通过终点回溯——定义p数组
要知道这条路上的可行流量——定义a数组
要提供反悔操作——增加反向边

无论是什么数组,使用之前都要clear——queue没有clear,所以每次使用的话重新定义即可
重复的部分写成函数——再谈addedge

本题一开始的难点在于如何建立设备与插座之间的
你有n个插座,m个设备,但是是以对应的“规格”来建立关系的
所以既要保存全部信息——除了设备的名字
又要加入对应的规格信息——getnu函数应运而生

我们又知道了能够转换的关系之后——这个也要靠getnu来实现,因为你不能用字符串去作为数组下标吧?
就可以依照设备或者插座的的编号信息来建立联通的边了
边上的点就可以用对应的编号来addedge了
然而我是严格按照个体来建立边的,也就是说每一个东西我都有
给它们一个独立的编号,例如在样例中1-5是设备编号
6-9是插座编号——能联通则建一条容量为INF的边
起点到设备和插座到终点也连上容量为INF的边

之后就是求s-t最大流的过程了
:这段话是我的自我总结,你可能看不懂的。
总之就是现实例子会让你更加理解增广路但是你可能认识的不全面。
所以——多刷题
在这个过程中发现如果纯粹用现实生活的例子来解释增广路
我之前的自我解读是不全面的,之前的解读是
遇到重复边后新路流量走老路
老路上对应的等量流量去走新路
但在这里(按照我的建图方式)则是
新路的共享边(对于它的正向)之后部分给老路走
新路则走共享边(对于老路的正向)之后部分

然而刘汝佳大神则是直接按照规格来建模
这就很我佛慈悲了,他的做法也不用考虑
插座和设备规格一样的情况,因为在他的建图方式这两个东西(规格一样的)完全是
一个点
不不不,如果是同一个规格的,
假设aaa-aaa
起点是不是仍然连了三条边到a去?
a是不是仍然连接了三条边到终点去?
边依旧是存在的
边依旧是存在的啊,所以
如果是从同一个点进去又直接到终点
说明选择的是同一个规格的设备和插座
如果不是的话——走另外的点,说明是能通过转换器达到统一规格的设备和与之转换后规格相同的插座
比如有ab两种设备,通过转换b能去插a规格的插座 a能去插c规格的插座
刚好有ac两种插座
一开始我先给a设备和a插座配对(只有两条边一个中转点
后来b要去插a,a插座是不是已经被a设备插了
但是刘汝佳大神的方法就呈现出一种我可以让你去插c的感觉
而完全没有用到反悔这个招数
而实际上a设备是又去和c插座匹配
让b设备去和a插座匹配了
所以啊,多刷题,感受思维的奥妙*/


#include<bits/stdc++.h>
using namespace std;
const int maxn=400 + 5;
const int INF = 2000000000;
int d[maxn][maxn];
int runs,run;
vector<int> G[maxn];
vector<string> v;//存放出现过的类型
int aa[maxn];
int p[maxn];
struct rec{
	string name;
	int nu;
};
struct pl{
	string name;
	int nu;
};
int getnu(string x){
	for(int i=0;i<v.size();i++){
		if(v[i]==x) return i;
	}
	v.push_back(x);
	return v.size()-1;
}
struct edge{
    int from,to,cap,flow;
    edge(int u,int v,int w,int f):from(u),to(v),cap(w),flow(f){}
};
vector<edge> Edges;
void addEdge(int u,int v,int c){
    Edges.push_back(edge(u,v,c,0));
    Edges.push_back(edge(v,u,0,0));
    int m=Edges.size();
    G[u].push_back(m-2);
    G[v].push_back(m-1);
}
int main()
{
	int n,m,k,i,j,XH,hs,cnt,first=1,t,s;
	string tmp,tmp2; rec a; pl b;
	scanf("%d",&runs);
	for(run=1;run<=runs;run++){
        for(i=0;i<maxn;i++) G[i].clear();
		memset(d,0,sizeof(d)); Edges.clear(); v.clear();
		vector<rec> REC;
		vector<pl> PL;
		scanf("%d",&n);
		for(i=1;i<=n;i++){
			cin>>tmp;
			a.name=tmp;
			a.nu=getnu(tmp);
			REC.push_back(a);
		}
		scanf("%d",&m);
		for(i=1;i<=m;i++){
			cin>>tmp; cin>>tmp;
			b.name=tmp;
			b.nu=getnu(tmp);
			PL.push_back(b);
		}
		for(i=0;i<maxn;i++) d[i][i]=1;
		scanf("%d",&k);
		for(i=1;i<=k;i++){
			cin>>tmp>>tmp2;
			d[getnu(tmp)][getnu(tmp2)]=1;
		}
		XH=v.size();
		for(int mi=0;mi<XH;mi++)
			for(i=0;i<XH;i++)
				for(j=0;j<XH;j++)
				{
					d[i][j] |= (d[i][mi] && d[mi][j]);
				}
		/*for(i=0;i<n;i++)
			for(j=0;j<m;j++){
				if(d[PL[j].nu][REC[i].nu]==1){
					printf("第%d个设备可以和第%d个插座连接在一起\n",j+1,i+1);
				}
			}*/

        s=0;
    /*编号是从1-m(设备的编号),m+1到m+n(插座的编号),0和n+m+1分别代表起点s和终点s
    标号从0开始的是边的标号
    */
        for(i=1;i<=m;i++) addEdge(s,i,1);
        t=n+m+1;
        for(i=1;i<=n;i++)addEdge(i+m,t,1);
        for(i=0;i<m;i++)
            for(j=0;j<n;j++)
            if(d[PL[i].nu][REC[j].nu]==1) addEdge(i+1,m+j+1,INF);
        /*for(i=0;i<Edges.size();i++){
            printf("%d %d %d %d\n",Edges[i].from,Edges[i].to,Edges[i].cap,Edges[i].flow);
        }*/
        for(;;){
            queue<int> Q;
            Q.push(s);
            memset(aa,0,sizeof(aa));
            aa[s]=INF;
            while(!Q.empty()){
                int x=Q.front(); Q.pop();
                for(i=0;i<G[x].size();i++){
                    edge& e=Edges[G[x][i]];
                    if(!aa[e.to]&&e.cap>e.flow){
                        aa[e.to]=min(aa[x],e.cap-e.flow);
                        p[e.to]=G[x][i];
                        Q.push(e.to);
                    }//

                }
                if(aa[t]) break;
            }
            if(!aa[t]) break;
            for(hs=t;hs!=s;hs=Edges[p[hs]].from){
                Edges[p[hs]].flow+=aa[t];
                Edges[p[hs]^1].flow-=aa[t];
            }
        }
        cnt=0;
        for(i=0;i<m;i++) if(Edges[2*i].flow==1)  ++cnt;
        if(first) first=0;
        else printf("\n");
        printf("%d\n",m-cnt);
	}
	return 0;
}

-------帅气与幽默并存的分割线------

// UVa753 A Plug for UNIX
// Rujia Liu
// 算法一:先做一次floyd,然后再构图
#include<bits/stdc++.h>
using namespace std;

vector<string> names;
int ID(const string& s) {
  for(int i = 0; i < names.size(); i++)
    if(names[i] == s) return i;
  names.push_back(s);
  return names.size() - 1;
}

const int maxn = 400 + 5;

int n, m, k;       // 插座个数,设备个数,转换器个数
int d[maxn][maxn]; // d[i][j]=1表示插头类型i可以转化为插头类型j
int target[maxn];  // 各个插座的类型
int device[maxn];  // 各个设备的类型

const int INF = 1000000000;

struct Edge {
  int from, to, cap, flow;
  Edge(int u, int v, int c, int f):from(u),to(v),cap(c),flow(f) {}
};

struct EdmondsKarp {
  int n, m;
  vector<Edge> edges;    // 边数的两倍
  vector<int> G[maxn];   // 邻接表,G[i][j]表示结点i的第j条边在e数组中的序号
  int a[maxn];           // 当起点到i的可改进量
  int p[maxn];           // 最短路树上p的入弧编号

  void init(int n) {
    for(int i = 0; i < n; i++) G[i].clear();
    edges.clear();
  }

  void AddEdge(int from, int to, int cap) {
    edges.push_back(Edge(from, to, cap, 0));
    edges.push_back(Edge(to, from, 0, 0));
    m = edges.size();
    G[from].push_back(m-2);
    G[to].push_back(m-1);
  }

  int Maxflow(int s, int t) {
    int flow = 0;
    for(;;) {
      memset(a, 0, sizeof(a));
      queue<int> Q;
      Q.push(s);
      a[s] = INF;
      while(!Q.empty()) {
        int x = Q.front(); Q.pop();
        for(int i = 0; i < G[x].size(); i++) {
          Edge& e = edges[G[x][i]];
          if(!a[e.to] && e.cap > e.flow) {
            p[e.to] = G[x][i];
            a[e.to] = min(a[x], e.cap-e.flow);
            Q.push(e.to);
          }
        }
        if(a[t]) break;
      }
      if(!a[t]) break;
      for(int u = t; u != s; u = edges[p[u]].from) {
        edges[p[u]].flow += a[t];
        edges[p[u]^1].flow -= a[t];
      }
      flow += a[t];
    }
    return flow;
  }
};

EdmondsKarp g;

int main() {
  int T;
  cin >> T;
  while(T--) {
    names.clear();
    string s1, s2;
    cin >> n;
    for(int i = 0; i < n; i++) {
      cin >> s1;
      target[i] = ID(s1);
    }
    cin >> m;
    for(int i = 0; i < m; i++) {
      cin >> s1 >> s2;
      device[i] = ID(s2);
    }
    cin >> k;
    memset(d, 0, sizeof(d));
    for(int i = 0; i < k; i++) {
      cin >> s1 >> s2;
      d[ID(s1)][ID(s2)] = 1;
    }
    // floyd
    int V = names.size(); // 插头类型个数
    for(int k = 0; k < V; k++)
      for(int i = 0; i < V; i++)
        for(int j = 0; j < V; j++)
          d[i][j] |= d[i][k] && d[k][j];

    g.init(V+2);
    for(int i = 0; i < m; i++)
      g.AddEdge(V, device[i], 1); // 源点->设备
    for(int i = 0; i < n; i++)
      g.AddEdge(target[i], V+1, 1); // 插座->汇点

    for(int i = 0; i < m; i++)
      for(int j = 0; j < n; j++)
        if(d[device[i]][target[j]]) g.AddEdge(device[i], target[j], INF); // 设备->插座
    int r = g.Maxflow(V, V+1);
    cout << m-r << "\n";
    if(T) cout << "\n";
  }
  return 0;
}

 

 

C++调用海康相机SDK采集图像(C++\QT Creator\openCV\线程\接口) C++调用海康相机SDK采集图像(C++\QT Creator\openCV\线程\接口) 之前写了一篇关于C++调用海康相机SDK采集图像的文章,有很多人私下发送消息咨询了一些问题,由于工作繁忙,只答复了一部分问题,今天抽出时间从头梳理了一下大家提出的问题,把我能够回答的问题都解答一次。上一次的程序只是简单的实现了图像的采集,没有使用到线程,今天把程序重新做出调整,把线程和多态加进去。文章最后有项目的下载地址。 我使用的是QT Creator这个IDE,版本信息如下: 我把相机采集的图像转换为openC 阅读详情

相关推荐

变色龙哈希函数 Chameleon Hash 可变型区块链

哈希函数 Hash: 众所周知,区块链有着极其优秀的安全性就是因为其充分使用了哈希函数。 哈希简单用一句话来讲,就是:将任意长度输入的字串可转换成一个固定长度的字串,通过原始字串可以很容易地算出转换后的字串,通过转换后的字串很难还原出原始字串。 哈希函数特征: 1. 对于任意m作为输入,得到输出的结果,很难找到另一个输入m'  (m'不等于m),使得m'的Hash结果也为同样的输出

新手村 1万+

紫书例题11-7 UNIX插头 (A Plug for UNIX)

题意:n个插座,m个设备,k个转换器。现在你要把这些设备插到插座上,每个设备都有对应的插头类型,使用转换器就可以“转化”插头类型。转化器的数量是无限提供的,就是插头类型可以任意转化。现在问你最少剩多少个不匹配的设备。 分析:n个插座,m个设备,两两匹配,我们不难想到这是类似于一个二分图的结构。让我们把n个出现的插座连上超级源点,但多于n的插座(会有多的)不能连上源点。再把设备连上汇点.再把插座类型连上设备。 最后,就是设备之间是可以相互转化的。我们使用最短路算法floyd求一下各个点之间的连通性。得到一个连

qq_36018057的博客 245

FFmpeg硬件加速实战:VAAPI驱动配置全攻略(含NVIDIA/Intel避坑指南)

本文详细解析了在Linux环境下配置FFmpeg使用VAAPI接口实现硬件加速的完整流程。针对NVIDIA、Intel等主流显卡,提供了从驱动安装、环境变量设置到多显卡切换的实战指南,并重点解决了闭源驱动冲突、国产系统适配等常见问题,帮助用户有效提升视频处理性能。

weixin_29306011的博客 455

POJ 1087 A Plug for UNIX //MAXMATCH

<br />A Plug for UNIXTime Limit: 1000MS Memory Limit: 65536KTotal Submissions: 8406 Accepted: 2638<br />DescriptionYou are in charge of setting up the press room for the inaugural meeting of the United Nations Internet eXecutive (UNIX), which has an intern

hqd_acm的专栏 795

【Office激活】学校正版Office已激活成功仍弹出激活窗口

学校正版Office激活问题:已激活成功仍弹出激活窗口

ESCM_的博客 1万+

Mac上快速部署DeepSeek模型:Ollama终端操作全指南

本文详细介绍了在Mac上使用Ollama终端快速部署DeepSeek模型的完整指南。从硬件要求、Ollama安装、模型下载运行,到高级配置、可视化界面及常见问题解决,提供了全流程操作步骤与优化技巧,帮助开发者高效搭建本地AI助手,实现稳定、私密的离线使用体验。

weixin_29251567的博客 550

Uva 753-——UNIX插头———网络流基础

题目大意:有n个插座,m个设备,k个适配器,每种都小于等于100。现在给出插座的种类和个数,给出设备的种类和个数,再给出已有的适配器种类,每种无限个,问最少会剩下几个设备没有插座充电.。 题目来源:刘汝佳紫书上的网络流例题。 方法思路:这个例题让我学习到了网络流的标准建模思路,附带巩固了Floyd的传递闭包的思路,就是计算从一点到另一点是否有边。说实话网络流建模是真的难,这里我们先选定一个...

Q755100802的博客 300

AI Agent开发第85课-DeepSeek-OCR 安装全指南:从 Transformers 到 vLLM,手把手教你跑通企业级 OCR

本文系统讲解 DeepSeek-OCR 的两种部署方式——基于 Hugging Face Transformers 的标准推理与基于 vLLM 的高性能加速推理。详细说明 CUDA 与 PyTorch 版本匹配、环境验证、依赖安装等关键细节,并提供可直接运行的完整代码示例。无论你是单卡调试还是高并发服务部署,都能在这里找到清晰路径。

打造全国最全的AI Agent开发知识领域的博客 2542

uva753(最大流)

题目的意思就是有n种插口,然后有m个设备,每个设备

潜水的程序猿 1182

gseapy python包GO、KEGG富集(注释)分析

文档案例参考:https://gseapy.readthedocs.io/en/latest/gseapy_example.html#Over-representation-analysis-by-Enrichr-web-services安装:建议安装最新版(这里安装的1.04):https://github.com/zqfang/GSEApy/releases。

weixin_42357472的博客 3611

TPAMI 2024 | MO-MIX:基于深度强化学习的多目标多智能体协同决策

深度强化学习(RL)已被广泛应用于解决复杂的决策问题。在许多现实世界的场景中,任务通常有多个相互冲突的目标,并且可能需要多个智能体进行合作,这些是多目标多智能体决策问题。然而,在这个交叉领域的研究工作还相对较少。现有的方法仅限于单独的领域,并且只能处理具有单一目标的多智能体决策,或者具有单一智能体的多目标决策。在本文中,我们提出了MO-MIX来解决多目标多智能体强化学习(MOMARL)问题。我们的方法基于集中训练与分散执行(CTDE)框架。

小白学视觉 1129

POJ1087——建图+建图+最大匹配(最大流)

题目链接:http://poj.org/problem?id=1087 You are in charge of setting up the press room for the inaugural meeting of the United Nations Internet eXecutive (UNIX), which has an international mandate to mak...

mumei的博客 403

复分析 阿尔福斯(Ahlfors) 第三版答案 英文

答案分为十章,有部分习题没有答案,全英文复分析阿尔福斯(Ahlfors) 第三版答案

uva 753 - A Plug for UNIX(网络流最大流)

题目链接:uva 753 - A Plug for UNIX 题目大意:给出n,有n种插座;给出m,表示有m种电器,给出电器名以及插头的类型;给出k,表示有k种转接器,给出可以桥接的插头和插座。 问说最少有多少个电器没有插座用。 解题思路:网络流,问题是怎样建图。我的做法是将0做为起点s,与所有的插座建立一条边,容量为1,然后再将所有的电器与终点t建立一条边,容量为1;然后将转

不慌不忙、不急不躁 3896

NTscan扫描工具

ntscan是一个扫描器,可以扫描没有密码和弱密码的共享,先到配置文件中填写猜测的用户名和密码,扫描过程中右侧出现的是扫描日志。

TMS_WebGMaps_1.9.8.0_Full_Source

TMS_WebGMaps_1.9.8.0_Full_Source 全源码 delphi cbuilder

A Plug for UNIX UVA - 753(网络流)

A Plug for UNIX UVA - 753 题意&&思路: 基本和这道差不多传送门里的poj1087 AC #include <iostream> #include <vector> #include <cstring> #include <queue> #include <cstdio> #include <map> #include <string> #include <algorithm

qq_45377553的博客 151

A Plug for UNIX UVA - 753

问题 分析 添加两个节点,一个源节点,一个宿节点 解法1:首先用floyd算出所有的转换器之间的连接关系,然后将插头和插座看作点,转换器作为边,容量是INF,连接源点和每个插头,每个插座和宿节点,容量是1,计算最大流量 解法2:不适用Floyd,直接构图,每个出现过的插头或者插座都看作一个节点,将转换器看作边,容量INF,添加源节点,宿节点 解法1: EK : // // Created by Z...

zpf1998的博客 228

UVa 753 A Plug for UNIX

本题通过构建有向图表达适配器转换关系,利用传递闭包得到插座与插头之间的可达性,进而转化为二分图最大匹配问题,使用最大流算法求解。关键点在于正确理解适配器的方向(插头类型到插座类型),并考虑适配器串联的情况。由于数据规模小,BFSBFS求传递闭包和算法均能高效运行。输出结果时注意每个测试用例之间输出空行。该解法清晰且具有通用性,适用于类似设备与接口匹配的问题。

寂静山林 195

UVA753 A Plug for UNIX 题解

题目描述: 有 nnn 个插座,mmm 个设备和 k(n,m,k≤100)(n,m,k≤100)k (n, m, k \leq 100)(n,m,k \leq 100)k(n,m,k≤100)(n,m,k≤100)种转换器,每种转换器有无限多。已知每个插座的类型,每个设备的插头类型,以及每种转换器的插座类型和插头类型。插头和插座类型都用不超过 2424 个字母表示,插座只能插到类型名称相同的插座中。 例如,有 44 个插座,类型分别为 A,B,C,D;有 5 个设备,插头类型分别为 B,C,B,B,X;还有

weixin_39412108的博客 236

题解 UVA753 【UNIX插头 A Plug for UNIX】

题目简述 有 n 个插座,m 个设备和 k (n, m, k ≤ 100) 种转换器,每种转换器有无限多。已知每个插座的类型,每个设备的插头类型,以及每种转换器的插座类型和插头类型。插头和插座类型都用不超过 2424 个字母表示,插座只能插到类型名称相同的插座中。 例如,有 4 个插座,类型分别为 A,B,C,D;有 5 个设备,插头类型分别为 B,C,B,B,X;还有三种转换器,分别是 B-&g...

weixin_30762087的博客 170

UVa #753 A Plug for UNIX (例题11-7)

网络最大流问题。 建图的时候,取一个起点s,与所有设备的接口连接;再取一个终点t,与所有插线板的接口连接,流量都设为1。注意这里可能在相同的点之间多次添加边(比如不同的设备有着相同的接口),不过不影响解,只不过可能会增加增广的次数,对效率有所影响。 之后在转换器可以转换的接口之间连线,流量无限大。 这样,求s到t之间的最大流,再用设备数量减去最大流的数量就是答案了。

专攻挖掘机炒鸡蛋算法的专栏 832

POJ 1087 A Plug for UNIX / HDU 1526 A Plug for UNIX / ZOJ 1157 A Plug for UNIX / UVA 753 A Plug for ...

POJ 1087 A Plug for UNIX / HDU 1526 A Plug for UNIX / ZOJ 1157 A Plug for UNIX / UVA 753 A Plug for UNIX / UVAlive 5418 A Plug for UNIX / SCU 1671 A Plug for UNIX (网络流) Description You are in cha...

dipinzhu4111的博客 358

uva753 A Plug for UNIX

网络流的问题一般都会加S,T! 网络流init参数一般为节点数(包括S,T) maxn为点数+一点(注意可能加点,拆点...) 把插头看做结点,增加S,T链接设备和插头(容量为1),转换器作为边(容量无穷大),套模板。用的是紫书第二种方法,因为更喜欢思维直接一点的方式。 读取输入时用一个ID函数方便了建图。 int ID(const string& s) { ...

dengdouweng1282的博客 140

uva 753 A Plug for UNIX (最大流)

uva 753 A Plug for UNIXYou are in charge of setting up the press room for the inaugural meeting of the United Nations Internet eXecutive (UNIX), which has an international mandate to make the free flow

总有那么一群人喜欢盯着我的博客看,估计这是他们见过最长的博客名,我必须得告诉他们博客名最长可以写多长 1025

UVA 753 A Plug for UNIX

最大流解决 。 设置源点 0,连接所有设备(device) 。设备-插头 -汇点 #include <map> #include <set> #include <list> #include <cmath> #include <ctime> #include <deque> #include &l...

deko2014的博客 95

UVa 753 A Plug for UNIX EK算法即可

You are in charge of setting up the press room for the inaugural meeting of the United Nations Internet eXecutive (UNIX), which has an international mandate to make the free flow of information and ideas on the Internet as cumbersome and bureaucratic as po

苦鬼·。 275

UVA 753 A Plug for UNIX

n个插板,m台设备,k种转换器,一开始WA了一次,原来是忘了每种转换器的数目时无限多的,建立边时需要注意 和UVA 11045 My T-shirt suits me  有点类似,稍微复杂一点,并且需要查询 匹配再添加相应的边。 大体思路: 将每台设备拆分成两点,建立容量为1的边,并且建立从源点0到该设备拆分点的一条边,容量为1;每个转换器同样拆分建立容量无限的边,然后插板拆分,建立容量为

rootial的专栏 822

A Plug for UNIX UVA - 753 插头转换 floyd+匈牙利

题目链接:https://vjudge.net/problem/UVA-753 题意:有n个插座 m个设备 k种转换器,转换器每种的个数是无限的,并且可以嵌套使用,求最少剩余的设备数。 思路:整体思路就是建图,然后用floyd求出哪些设备可以通过一些转换器的使用进而用到插座,然后再用匈牙利算法求一个最大匹配。 用一个map分配每种插头或插座的id 注意所有插头或插座的类型加起来可能会达到400种,数组要开的大一点。 特别注意匈牙利算法调用时参数不能等于0 #include <cstdio>

A 305
上一篇: 第十一章例题 uva 1151 C- Buy or Build
下一篇: 第十一章例题 UVa11082 Matrix Decompressing
JXUFE_ACMer
博客等级 码龄9年 20粉丝 52原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

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

抵扣说明:

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

余额充值