1月12号总结

今天做了几道题,来谈一谈感想。

首先是CF11080F:求最小生成树的个数。

这道题我的作法是:构造一颗最小生成树,枚举其他不在里面的边,若加入这条边,一定可以构成一个环。在这个环中(除开这条边)的最大边权与这条边相等,则可以多出一颗最小生成树。维护最大值和环,用树上倍增就可以了。不过倍增一
个地方容易写错,这里提出来一下:

void init(){
	  	for(int j=1;(1<<j)<=n;++j){
		  		For(i,1,n){
				if(!Fa[i][j-1]) continue;
				Fa[i][j]=Fa[Fa[i][j-1]][j-1];
				Max[i][j]=max(Max[i][j-1],Max[Fa[i][j-1]][j-1]);
		}
	}
}

这里应该先枚举 j j 再枚举 i i ,否则更新会出问题。

然后是一道权值并查集的题,权值并查集在合并时应该遵循向量加减法原则,同时要注意谁合并到谁上面去,这个在有些题目就是个坑点。

还有一道就是HDU3191:这道题有个博客讲得很好,指出了很多错误,可以加深理解。传送门

最后做了一个二分答案+拓扑排序的题:这道题提供了一个思想,在拓扑排序中,环的形成一定是存在边从拓扑序高的指向拓扑序低的。二分答案,这个还是很好看出来的,像这类不同的限度,有很大的不一样,而且相互之间没有影响,只与它的值相关。

发布了51 篇原创文章 · 获赞 6 · 访问量 2万+

猜你喜欢

转载自blog.csdn.net/qq_35776579/article/details/103949401