疑问
查看原帖
疑问
1078810
xingsunderen楼主2025/1/12 20:42

kruskal+LCA

刚觉问题挺玄学的,找不到dfs函数的问题,还请dalao帮忙检查一下

第一次dfs是这样写的->

void dfs(int u,int f){
	for(auto i:mst[u]){
		int v=i.first,w=i.second;
		if(v==f) continue;
		dis[v]=dis[u]+1;
		fa[v][0]=u;
		maxw[v][0]=w;
		secw[v][0]=0;
		for(int i=1;i<=20;i++){
			fa[v][i]=fa[fa[v][i-1]][i-1];
			maxw[v][i]=max(maxw[v][i-1],maxw[fa[v][i-1]][i-1]);
			secw[v][i]=max(secw[v][i-1],secw[fa[v][i-1]][i-1]);
			if(maxw[v][i-1]>maxw[fa[v][i-1]][i-1]){
				secw[v][i]=max(secw[v][i],maxw[fa[v][i-1]][i-1]);
			}
			else if(maxw[v][i-1]<maxw[fa[v][i-1]][i-1]){
				secw[v][i]=max(secw[v][i],maxw[v][i-1]);
			}
			dfs(v,u);
		}
	}
}

TEL#5~#13,去求助一下隔壁dalao,dalao把代码改成这样->

void dfs(int u,int f){
	for(auto i:mst[u]){
		int v=i.first,w=i.second;
		if(v==f) continue;
		dis[v]=dis[u]+1;
		fa[v][0]=u;
		maxw[v][0]=w;
		secw[v][0]=0;
		for(int i=1;i<=20;i++){
			fa[v][i]=fa[fa[v][i-1]][i-1];
			maxw[v][i]=max(maxw[v][i-1],maxw[fa[v][i-1]][i-1]);
			secw[v][i]=max(secw[v][i-1],secw[fa[v][i-1]][i-1]);
			if(maxw[v][i-1]>maxw[fa[v][i-1]][i-1]){
				secw[v][i]=max(secw[v][i],maxw[fa[v][i-1]][i-1]);
			}
			else if(maxw[v][i-1]<maxw[fa[v][i-1]][i-1]){
				secw[v][i]=max(secw[v][i],maxw[v][i-1]);
			}
		}
		dfs(v,u);
	}
}

AC

但我不知道问题在哪里,还请评论区dalao帮助

2025/1/12 20:42
加载中...