cf1242B】的更多相关文章

题目大意 有一个n个点的完全图,上面有m条边的权值为1,其余为0 求MST n,m<=10^5 题解 方法一: 维护一个点集,表示当前MST中的点 一开始任意加一个点 对于一个未加入的点,如果和点集中的点的1边数<点集大小,那么必定有0边 所以用堆维护与点集中点有1边的条数的点,每次取出度数最小的 重点:c++的堆的比较函数不太一样 如果一个点的度数=点集大小,答案+1 之后把这个点加进点集(即覆盖其余的点) 方法二: 暴力bfs,用set维护剩余未加入的点 如果用一个点取扩展其余的点,每个点…
题意简述:给出一个n个点的完全图,边权要么是1要么是0,输入只给出权值的是1的那些边,求解最小生成树的权值 解答:边很多,我们考虑使用prim算法,prim算法的过程中维护了一个dis数组,这里我们可以发现数组的值单调递减,并且只有01两种取值 因此我们考虑用数据结构去加速他,具体来说就是维护两个集合一个集合存1,记为s1,一个存0记为s2 然后最重要的就是如何更新这个dis数组,也就是s1和s2的更新 显然我们只能去选择遍历权值为1的边,因此每加进去一个点,我们遍历他出发的所有的边,显然如果他…