关于严格次小生成树
  • 板块学术版
  • 楼主abc_de
  • 当前回复0
  • 已保存回复0
  • 发布时间2022/10/3 22:46
  • 上次更新2023/10/27 08:56:39
查看原帖
关于严格次小生成树
287395
abc_de楼主2022/10/3 22:46

想问一下这两种维护区间次大值的方法是不是都没有问题 洛谷上是都过了 谢谢

void dfs(int u,int f){
	dep[u]=dep[f]+1;
	fa[u][0]=f;
	cma[u][0]=-0x3f3f3f3f;
	for(int i=1;(1<<i)<=dep[u];i++){
		fa[u][i]=fa[fa[u][i-1]][i-1];	
		int kk[4]={ma[u][i-1],ma[fa[u][i-1]][i-1],cma[u][i-1],cma[fa[u][i-1]][i-1]};
		std::sort(kk,kk+4);
		ma[u][i]=kk[3];
		int ptr=2;
		while(ptr>=0&&kk[ptr]==kk[3]) ptr--;
//		if(ptr==0) cout<<"&&&&&";
		if(ptr==-1) cma[u][i]=-0x3f3f3f3f;
		else cma[u][i]=kk[ptr];
	}
	for(int i=head[u];i;i=e[i].nxt){
		int v=e[i].to;
		if(v==f) continue;
		ma[v][0]=e[i].w;
		dfs(v,u);
	}
}
void dfs(int u,int f){
	dep[u]=dep[f]+1;
	fa[u][0]=f;
	cma[u][0]=-0x3f3f3f3f;
	for(int i=1;(1<<i)<=dep[u];i++){
		fa[u][i]=fa[fa[u][i-1]][i-1];	
		int kk[4]={ma[u][i-1],ma[fa[u][i-1]][i-1],cma[u][i-1],cma[fa[u][i-1]][i-1]};
		std::sort(kk,kk+4);
		ma[u][i]=kk[3];
		int ptr=2;
		while(ptr>=2&&kk[ptr]==kk[3]) ptr--;
		cma[u][i]=kk[ptr];
	}
	for(int i=head[u];i;i=e[i].nxt){
		int v=e[i].to;
		if(v==f) continue;
		ma[v][0]=e[i].w;
		dfs(v,u);
	}
}
2022/10/3 22:46
加载中...