最短路专题

解题报告:【kuangbin带你飞】专题四 最短路练习题 最短路合集 阅读详情

最短路

F l o y d Floyd Floyd 算法 O ( n 3 ) O(n^3) O(n3)

最短路

	for(register int k=1;k<=n;k++)
		for(register int i=1;i<=n;i++)
			for(register int j=1;j<=n;j++)
				Dp[i][j]=min(Dp[i][j],Dp[i][k]+Dp[k][j]);

判负环

如果 D p x , y < 0 Dp_{x,y}<0 Dpx,y​<0 那么存在负环 . . .
可以运用动态规划输出路径的方法输出负环 . . .

传递闭包

在交际网络中 , , , 给定若干个元素和若干对二元关系 , , , 且关系具有传递性 . . . " " " 通过传递性推导出尽量多的元素之间的关系 " " " 的问题叫做传递闭包 . . .

建立邻接矩阵 d , d, d, 其中 d i , j = 1 d_{i,j}=1 di,j​=1 表示 i i i 与 j j j 有关系 , , , d i , j = 0 d_{i,j}=0 di,j​=0 表示 i i i 与 j j j 没有关系 . . . 特别的 , , , d i , i d_{i,i} di,i​ 始终为 1. 1. 1. 使用 F l o y d Floyd Floyd 算法可以解决 . . .

	for(register int k=1;k<=n;k++)
		for(register int i=1;i<=n;i++)
			for(register int j=1;j<=n;j++)
				Dp[i][j]|=Dp[i][k]&Dp[k][j];

B e l l m a n F o r d B f s BellmanFordBfs BellmanFordBfs 算法

最短路

判负环

普通算法 O ( n m ) O(nm) O(nm)

千万小心 , , , s i z e v sizev sizev 是连通块中点的个数 . . .

T o t Tot Tot 和 C n t Cnt Cnt 是互相独立的 , , , 可以只留一个 , , , C n t Cnt Cnt 效率更高 . . .

const int MaxN=2100;
const int MaxM=5100;
ShortestPathGraphs<int,MaxN,MaxM>G;
Queues<int,1100>Q;
bool Visit[MaxN];
int Dist[MaxN],Cnt[MaxN],Tot[MaxN];

inline bool BellmanFord(int start,int sizev){
	memset(Tot,0,sizeof(int)*(sizev+1));Tot[start]=1;//入队次数 
	memset(Cnt,0,sizeof(int)*(sizev+1));//从start出发到 i 的最短路的边数 
	memset(Dist,0x3f,sizeof(Dist));Dist[start]=0;
	memset(Visit,false,sizeof(Visit));
	Q.Clear();Q.Push(start);
	while(!Q.Empty()){
		int from=Q.Front();Q.Pop();Visit[from]=false;
		for(register int k=G.Last[from];k!=-1;k=G.Next[k]){
			if(Dist[G.To[k]]>Dist[from]+G.Cost[k]){
				Dist[G.To[k]]=Dist[from]+G.Cost[k];
				Cnt[G.To[k]]=Cnt[from]+1;
				if(Cnt[G.To[k]]>sizev)return true;
				if(!Visit[G.To[k]]){
					Visit[G.To[k]]=true;
					Q.Push(G.To[k]);
					if(++Tot[G.To[k]]==sizev)return true;
				}
			}
		}
	}
	return false;
}

int n,m;
int main(){
	int Test=1;Read(Test);
	while(Test--){
        Read(n),Read(m);
		G.Clear();
        for(register int i=1,x,y,c;i<=m;i++){
            Read(x),Read(y),Read(c);
            Insert(G,x,y,c);
			if(c>=0)Insert(G,y,x,c);
        }
        if(BellmanFord(1,n))printf("YES\n");
        else printf("NO\n");
	}
	return 0;
}
B i t s e t Bitset Bitset 优化 O ( n 2 m ω ) O(\frac{n^2m}{\omega}) O(ωn2m​)
const int MaxN=2100;
const int MaxM=5100;
bitset<MaxN>Cnt[MaxN];
ShortestPathGraphs<int,MaxN,MaxM>G;
Queues<int,1100>Q;
bool Visit[MaxN];
int Dist[MaxN];
inline bool BellmanFord(int start,int sizev){
	for(register int i=1;i<=sizev;i++)
		Cnt[i].reset(); 
	//Cnt[i]代表的是start到i的最短路的经过的点 
	memset(Dist,0x3f,sizeof(int)*(sizev+1));
	memset(Visit,false,sizeof(bool)*(sizev+1));
	Q.Clear();Q.Push(start);
	Cnt[start].set(start);
	Dist[start]=0;
	while(!Q.Empty()){
		int from=Q.Front();Q.Pop();Visit[from]=false;
		//防止有自环权值为负 
		for(register int k=G.Last[from];k!=-1;k=G.Next[k]){
			if(Dist[G.To[k]]>Dist[from]+G.Cost[k]){
				if(Cnt[from][G.To[k]])return true;
				Dist[G.To[k]]=Dist[from]+G.Cost[k];
				Cnt[G.To[k]]=Cnt[from];
				Cnt[G.To[k]].set(G.To[k]);
				if(Visit[G.To[k]]==false){
					Visit[G.To[k]]=true;
					Q.Push(G.To[k]);
				}
			}
		}
	}
	return false;
}

T a r j a n Tarjan Tarjan 算法优化

const int MaxN=3e3;
const int MaxM=6e3;

int Last[MaxN];
int Next[MaxM],To[MaxM],cnt;
long long Cost[MaxM];

inline void Insert(int from,int to,long long cost){
	To[cnt]=to;Cost[cnt]=cost;
	Next[cnt]=Last[from];Last[from]=cnt++;
}

int Dfn[MaxN],Low[MaxN],Belong[MaxN],tot,scc;
int Size[MaxN];
bool InSta[MaxN];
Stacks<int,MaxN>S;

inline void Tarjan(int from){
	Dfn[from]=Low[from]=++tot;
	S.Push(from);InSta[from]=true;
	for(int k=Last[from];k!=-1;k=Next[k]){
		if(!Dfn[To[k]]){
			Tarjan(To[k]);
			Low[from]=Min(Low[from],Low[To[k]]);
		}
		else if(InSta[To[k]])
			Low[from]=Min(Low[from],Dfn[To[k]]);
	}
	if(Low[from]==Dfn[from]){
		int now;scc++;
		do{
			now=S.Top();S.Pop();
			Belong[now]=scc;
			Size[scc]++;
			InSta[now]=false;
		}while(now!=from);
	}
}
long long Dist[MaxN];
int Cnt[MaxN];
bool Visit[MaxN];
Queues<int,MaxN>Q;
inline void Join(int from){
	Q.Push(from);Dist[from]=0;
	Cnt[from]=0;Visit[from]=true;
	for(int k=Last[from];k!=-1;k=Next[k])
		if(!Visit[To[k]])Join(To[k]);
}
inline bool BellmanFord(int sizev){
	memset(Visit,false,sizeof(Visit));
	Q.Clear();Join(1);
	while(!Q.Empty()){
		int from=Q.Front();Q.Pop();Visit[from]=false;
		for(int k=Last[from];k!=-1;k=Next[k]){
			if(Belong[from]!=Belong[To[k]])continue;
			if(Dist[To[k]]>Dist[from]+Cost[k]){
				Dist[To[k]]=Dist[from]+Cost[k];
				Cnt[To[k]]=Cnt[from]+1; 
				if(Cnt[To[k]]>=Size[Belong[To[k]]])return true;
				if(!Visit[To[k]]){
					Visit[To[k]]=true;
					Q.Push(To[k]);
				}
			}
		}
	}
	return false;
}
inline void ReInit(){
	cnt=tot=scc=0;
	memset(Last,-1,sizeof(Last));
	memset(Dfn,0,sizeof(Dfn));
	memset(Low,0,sizeof(Low));
	memset(InSta,false,sizeof(InSta));
	memset(Size,0,sizeof(Size));
	memset(Belong,0,sizeof(Belong));
}

D i j k s t r a Dijkstra Dijkstra 算法

正权最短路 O ( m log ⁡ n ) / O ( n 2 ) O(m\log n)/O(n^2) O(mlogn)/O(n2)

#include<cstdio>
#include<cstring>
#include<algorithm>
using namespace std;

const int InSize=(1<<20)+1;
const long long LInf=0x3f3f3f3f3f3f3f3f;

int input=InSize;
char InPut[InSize];
inline char GetChar()
{
    if(input>=InSize)fread(InPut,1,InSize,stdin),input=0;
    return InPut[input++];
}
#define GetChar() getchar()
template<typename Typename>
inline void Read(Typename& s)
{
	s=0;register char c=GetChar();
	while(c>'9'||c<'0')c=GetChar();
	while(!(c>'9'||c<'0')){s=s*10+c-48;c=GetChar();}
}

template<typename Typename>
inline Typename Min(const Typename&x,const Typename&y){
	if(x<y)return x;return y;
}
template<typename Typename>
inline Typename Max(const Typename&x,const Typename&y){
	if(x>y)return x;return y;
}
template<typename Typename>
inline void Swap(Typename&x,Typename&y){
	Typename t=x;x=y;y=t;
}

template<typename Typename,int MaxCnt>
struct Heaps{
	private:
		Typename Data[MaxCnt];
		int size;
		inline void UpFix(int now){
			int i=now>>1,j=now;//Dad[j]=i;
			while(i!=0){
				if(Data[i]<Data[j])break;
				Swap(Data[i],Data[j]);
				i>>=1;j>>=1;
			}
		}
		inline void DownFix(int now){
			int i=now,j=now<<1;
			while(j<=size){
				if(j+1<=size&&Data[j+1]<Data[j])j++;
				if(Data[i]<Data[j])break;
				Swap(Data[i],Data[j]);
				i=j;j<<=1;
			}
		}
	public:
		Heaps(){
			size=0;
		}
		inline void Clear(){size=0;}
		inline void Push(const Typename&x){
			if(size==MaxCnt-1)puts("Error Heap");
			else{
				Data[++size]=x;
				UpFix(size);
			}
		}
		inline void Pop(){
			Data[1]=Data[size--];
			DownFix(1);
		}
		inline Typename Top(){
			if(size==0){puts("Error Heap");return Typename();} 
			else return Data[1];
		}
		inline bool Empty(){return size==0;}
		inline int Size(){return size;}
};

template<typename TypenameC,int MaxN,int MaxM>
struct ShortestPathGraphs{
	typedef TypenameC costtype;
	int Last[MaxN],cntn;
	int Next[MaxM],To[MaxM],cntm;
	costtype Cost[MaxM];
	ShortestPathGraphs(){
		cntn=cntm=0;
		memset(Last,-1,sizeof(Last));
	}
	inline void Clear(){
		cntn=cntm=0;
		memset(Last,-1,sizeof(Last));
	}
};

template<typename TypenameG>
inline void Insert(TypenameG&G,int from,int to,typename TypenameG::costtype cost){
	G.To[G.cntm]=to;G.Cost[G.cntm]=cost;
	G.Next[G.cntm]=G.Last[from];G.Last[from]=G.cntm++;
}

template<typename Typename1,typename Typename2>
struct Pairs{
	Typename1 x;Typename2 y;
	Pairs(){}
	Pairs(const Typename1&_x,const Typename2&_y):
		x(_x),y(_y){}
	inline bool operator<(const Pairs&p){
		return x==p.x?y<p.y:x<p.x;
	}
};

const int MaxN=1e5+1e4;
const int MaxM=2e5+1e4;
ShortestPathGraphs<long long,MaxN,MaxM>G;
Heaps<Pairs<long long,int>,MaxN>H;
long long Dist[MaxM];

inline void Dijkstra(int start){
	memset(Dist,0x3f,sizeof(Dist));
	Dist[start]=0;H.Clear();
	H.Push(Pairs<long long,int>(Dist[start],start));
	while(!H.Empty()){
		while(!H.Empty()&&H.Top().x!=Dist[H.Top().y])H.Pop();
		if(H.Empty())break;
		int from=H.Top().y;H.Pop();
		for(register int k=G.Last[from];k!=-1;k=G.Next[k]){
			if(Dist[G.To[k]]>Dist[from]+G.Cost[k]){
				Dist[G.To[k]]=Dist[from]+G.Cost[k];
				H.Push(Pairs<long long,int>(Dist[G.To[k]],G.To[k]));
			}
		}
	}
}
int n,m,srt;
int main()
{
	Read(n);Read(m);Read(srt);
	for(register int i=1;i<=m;i++)
	{
		register int a,b;
		register long long c;
		Read(a);Read(b);Read(c);
		Insert(G,a,b,c);
	}
	Dijkstra(srt);
	for(register int i=1;i<=n;i++)
		if(Dist[i]==LInf)printf("2147483647 ");
		else printf("%lld ",Dist[i]);
	return 0;
}

原始对偶算法

K t h P a t h KthPath KthPath 问题

黑科技

O ( n + m ) O(n+m) O(n+m) 最短路

Xshell 连接 kali 虚拟机教程 启动ssh服务,启动后重新查看ssh服务状态,如下图active(running)正常。至此便可以直接使用Xshell登录kali系统了。至此虚拟机已经可以上网。-查看ssh服务状态。 阅读详情

相关推荐

HDMI 2.1超高清传输背后的“隐形功臣”:深入浅出图解VESA DSC压缩核心流程

本文深入解析HDMI 2.1超高清传输中的VESA DSC压缩技术,揭示其如何在不损失画质的前提下实现带宽减半。通过切片并行处理和智能算法,DSC技术有效解决了8K/4K高帧率视频的传输瓶颈,成为现代显示设备不可或缺的“隐形功臣”。

weixin_30615767的博客 423

ACM-ICPC 2018 沈阳赛区网络预赛 D Made In Heaven (k短路 :最短路 + 可持续化堆/A*)

https://nanti.jisuanke.com/t/31445 #include &amp;amp;lt;algorithm&amp;amp;gt; #include &amp;amp;lt;iostream&amp;amp;gt; #include &amp;amp;lt;cstring&amp;amp;gt; #include &amp;amp;lt;cstdio&amp;amp;gt; #include &amp;amp

sb的博客 375

一文说清Arduino如何实现舵机平滑转动(机器人场景)

深入讲解如何利用arduino控制舵机转动,实现机器人场景中的平稳运动。通过代码优化与脉冲宽度调节,让舵机动作更精准流畅,适用于各类自动化项目。

weixin_35706255的博客 898

第K短路

单源最短路+A*算法==第K短路A*算法是一种启发式搜索方法,与bfs,dfs的区别在于它可以利用一个启发函数进行选择,使搜索的时间复杂度被大大的优化。 A*主要的公式表达式为f(n)=g(n)+h(n); 其中 f(n) 是从初始点经由节点n到目标点的估价函数, g(n) 是在状态空间中从初始节点到n节点的实际代价, h(n) 是从n到目标节点最佳路径的估计代价。 那么在第K短路问题中,

magical_qting的博客 790

CrackerXI+脱壳实战:解决iOS应用逆向中的加密文件问题

本文详细介绍了如何使用CrackerXI+工具对iOS应用进行脱壳,解决App Store应用因FairPlay DRM加密而无法进行静态分析的难题。通过图形化界面一键操作,CrackerXI+能高效获取解密后的可执行文件,为逆向工程奠定基础。文章涵盖工具选型、实战步骤及常见问题排查,是iOS逆向入门与进阶的实用指南。

seed的博客 257

Unity-Chan Toon Shader卡通渲染学习

2.0 (UTS2)是一款用于图像和视频的卡通着色器,旨在满足从事卡通着色 3DCG 动画的创作者的需求。二、从0-1复刻UTS21.漫反射UTS2的漫反射部分主要有三个层组成,分别是基本颜色、第一阴影色和第二阴影色,分别对应着美术理论中的白、灰、黑。

qq_63133691的博客 2539

POJ3463 Sightseeing(dijkstra求最短路+次短路)

传送门:http://poj.org/problem?id=3463 题意:给你n个点和m条单向边,和起点s,终点t。问你从s到t的最短路和比最短路大1的路一共有几条。 思路:改造一下dijkstra,一开始只记录了一个点是否访问过,但是wa了,因为一个点可以通过一个点的最短距离和次短距离访问过来,所以要记录每个点的最短路和次短路是否都访问过了,需要一个vis[maxn][2]。因此,朴素dij

xtttgo的博客 820

单细胞轨迹分析实战:基于Monocle和CytoTRACE的细胞分化潜能与状态解析

本文提供了基于Monocle和CytoTRACE的单细胞轨迹分析实战指南。通过乳腺癌数据集,详细演示了从数据准备、伪时序分析、细胞分化潜能评估到分支点功能挖掘的全流程。结合两种工具的优势,能有效解析细胞状态动态演变,为发育和疾病研究提供关键见解。

weixin_29070861的博客 478

poj 2449 Remmarguts' Date(最短路+A*)

POJ - 2449点我点我:-) Remmarguts' Date Time Limit: 4000MS   Memory Limit: 65536KB   64bit IO Format: %lld & %llu Submit Status Description "Good man never make

Free Cat~~~ 跳动的喵 420

解决eNSP安装WinPcap版本冲突的完整指南

网络数据包捕获工具WinPcap是网络仿真环境的基础组件,其版本兼容性直接影响eNSP等网络模拟器的正常运行。当系统已安装新版WinPcap时,eNSP内置的旧版安装程序会因版本校验机制触发报错。通过彻底卸载现有驱动、安装特定版本WinPcap 4.1.2,并验证注册表和服务状态,可解决版本冲突问题。对于需要同时使用新版驱动的场景,可采用虚拟机隔离或Npcap兼容模式。该方案适用于Windows 10/11系统环境,涉及驱动签名、虚拟网卡等典型网络工程问题。

weixin_32612263的博客 336

使用R包PreMSIm预测微卫星不稳定的标题:基于基因表达量的微卫星不稳定性预测

在本文中,我们将介绍如何使用R语言中的PreMSIm包来根据基因表达量进行微卫星不稳定性的预测。需要注意的是,本文仅介绍了使用PreMSIm包进行微卫星不稳定性预测的基本流程和代码示例。在实际应用中,还需要考虑数据的质量控制、模型优化以及结果的解释和验证等因素,以确保预测结果的准确性和可靠性。预测结果将返回一个包含微卫星不稳定性指数的向量,其中每个元素对应一个样本的预测结果。在有了输入数据后,我们可以使用PreMSIm包中的函数进行微卫星不稳定性的预测。函数生成一个包含所有样本的微卫星不稳定性信息的表格。

2301_79330511的博客 382

有向无环图的最小路径点覆盖

有向无环图的最小路径点覆盖问题解法1.1.1. 拆点二分图定义2.2.2. 定理1113.3.3. 拓展问题 问题 给定一张有向无环图 ,,, 要求用尽量少的不相交的简单路径((( 不是有向边 ))) ,,, 覆盖有向无环图的所有顶点 ((( 也就是每个顶点恰好被覆盖一次 ).).). 这个问题被称为有向无环图的最小路径点覆盖... 解法 1.1.1. 拆点二分图定义 设原来的有向无环图为 G=(V,E),n=∣V∣.G=(V,E),n=|V|.G=(V,E),n=∣V∣. 把 GGG 中的每一个 xx

Darkside的博客 501

YOLOv8+SAM强强联合:用分割“喂“检测,复杂背景下作物AP从72%干到77.7%,杂草误检降60%

目标与背景高度相似:如农业(作物vs杂草)、工业(零件vs台面)、医学(病灶vs正常组织);遮挡严重的场景:如密集人群(人被遮挡)、森林(树木被枝叶遮挡);小目标密集场景:如无人机航拍(远处小目标易混背景)。

专注于Python爬虫开发,分享爬虫技巧、项目实战与反爬经验,使用Scrapy、BeautifulSoup等工具,解决数据抓取难题。 792

专题·最短路【including Dijkstra, SPFA,Floyd,传递闭包,二维最短路,分层图最短路,最短路计数……

DIj算法,堆优化版本,线段树优化版本; SPFA算法,Floyd算法,传递闭包; 如标题的各种最短路的应用

樱狸✨愿携清风归来处 1万+

精雕软件(JDpaint) 5.5 绿色版

精雕软件(JDpaint) 5.5 绿色版精雕软件(JDpaint) 5.5 绿色版精雕软件(JDpaint) 5.5 绿色版

ET2012新版免狗免安装绿色软件

ET2012新版免狗免安祖昂绿色软件。,新界面,新视觉,

kuangbin最短路专题Silver Cow Party (POJ - 3268)

kuangbin最短路专题4 传送门 题面 思路 老方法dijkstra。单向图。正向反向的图都建一遍。正向的图跑奶牛去参加聚会的最短路,反向的图跑回家的最短路。不建反向图就得跑n遍dij 代码 #include <bits/stdc++.h>//poj不能用万能头,这里是为了看起来简洁点 typedef long long ll; #define mP make_pair #define pii pair<int, int> using namespace std; int n

Sivannn的博客 279

文档:亲测可用解决vnc灰屏,黑屏,鼠标大黑叉情况

主要解决vnc-viewer灰屏,黑屏,鼠标大黑叉等现象,详细见文档。

[kuangbin带你飞]专题四 最短路 题解+总结

kuangbin带你飞:点击进入新世界 总结: 本人算是初学者中的初学者,欢迎交流~ kuangbin的专题确实是理解最短路的一大途径,这篇博客主要记录题解,顺便总结最短路的题型。 A.模板题 参考1 B.变形最短路 (求最大边权的最小值or最小边权的最大值) 参考2 . 3 文章目录总结:1.Til the Cows Come Hom2.Frogger3. Heavy Transportati...

放荡者的茶会 4730

VB摄像头监控

该VB模块可对摄像头捕获的画面进行录像等,可在创建的窗口进行控制

【专题】最短路算法

介绍了三种常用的最短路算法:Floyd, Dijkstra, Bellman-Ford。

WillHou的博客 484

专题训练——最短路练习

最短路练习 0. Til the Cows Come HomePOJ - 2387 完美的模板题 1 //#include<Windows.h> 2 #include<iostream> 3 #include<algorithm> 4 #include<cstring> 5 #include<cst...

weixin_30925411的博客 209

专题四 最短路练习

文章目录专题四 最短路练习POJ 2387 Til the Cows Come HomePOJ 2253 FroggerPOJ 1797 Heavy TransportationPOJ 3268 Silver Cow PartyPOJ 1860 Currency ExchangePOJ 3259 WormholesPOJ 1502 MPI MaelstromPOJ 3660 Cow ContestPOJ 2240 ArbitragePOJ 1511 Invitation CardsPOJ 3159 Cand

m0_49959202的博客 459

Kuangbin最短路专题

菜鸡第一篇博客 整理一下kuangbin的最短路专题(主要是ide出问题了没事干 目录 一、POJ 2387 Till the Cows HomeSPFA板子 二、POJ 2253 FroggerDij最大边最短路 三.POJ 1797 Heavy TranspotationDij最小边最长路 四、POJ 3268 Sliver Cow Party反向建图 五、POJ 1860 Currency ExchangeSPFA判正环 六、POJ 3259 Wormhole...

qq_62338494的博客 899

图论专题总结—最短路

时间非常有限,但还是强忍着对这个专题进行总结。一方面阶段性总结是“磨刀不误砍柴工”的最有效方法之一;二是在学习这个专题的时候看到很多大牛们的总结帖都是受益匪浅的,让其他人少走了很多弯路,自己也可以随时进行温故而知新。废话少说,看第一个小专题最短路问题。        常见的最短路算法有Dijkstra、Floyd、Bellman-Ford、SPFA等这几种,由于网上的知识讲解和算法分析都非常详细

VoidSun 605

[kuangbin带你飞]专题四 最短路练习

今天开始做专题四了,刷题的顺序是看某位知乎大佬大佬的回复,现在完成了专题一,希望可以把剩下的做完吧。 [kuangbin带你飞]专题一 简单搜索 [kuangbin带你飞]专题四 最短路练习 [kuangbin带你飞]专题五 并查集 [kuangbin带你飞]专题六 最小生成树 [kuangbin带你飞]专题十二 基础DP1 [kuangbin带你飞]专题十四 数论基础 [kuangbin带你飞]...

Geek_的博客 3878

最短路专题练习

D - Silver Cow Party 思路:求两次s到各点的最短路径(一次正向建图,一次反向建图) 代码: //#include<bits/stdc++.h> #include <algorithm> #include <iostream> #include <cstring> #include <cstdio> using name...

柯微 196
上一篇: Cpp泛型
下一篇: P4408 [NOI2003] 逃学的小孩 题解
DarksideCoder
博客等级 码龄7年 34粉丝 29原创
评论 1
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

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

抵扣说明:

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

余额充值