随笔分类 - 图论-生成树
摘要:"题目链接" Solution 有几点关键,首先,可以证明次小生成树一定是由最小生成树改变一条边而转化来. 所以需要枚举所有非最小生成树的边$(u,v)$.并且找到 $u$ 到 $v$ 的边中最大边和次大边. 为什么要找次大边呢?? 因为可能最大边与要替换的边长度相等,那么这种条件生成的便不是严格的
阅读全文
摘要:"题目链接" Solution $Kruskal$ . 一直维护生成树,同时记录一下联通块数量. 如果联通块数量为 $s+1$,那么直接结束. 最后输出答案即可. Code cpp include define db double using namespace std; const int max
阅读全文
摘要:"题目链接" Solution 裸的最小生成树. Code cpp include using namespace std; const int maxn=500008; struct sj{int to,fr,w;}a[maxn]; bool cmp(sj x,sj y) {return x.w'
阅读全文
摘要:"题目链接" Solution $Trie$ 树 + 启发式合并. 考虑到是异或,于是按位贪心.让高位的尽量相同. 然后要计算每棵子树的代价,似乎并没有很好的方法?? 于是只能启发式合并. 对于每一个有两个子节点的点; 将 $siz$ 较小的点中的值放到 $siz$ 较大的子树中去查询即可. 时间复
阅读全文
摘要:"题目链接" Solution $Kruskal$ 加一点点东西就好... $n$ 很小,可以暴力搞出所有的边. 然后按照边的大小排序. 用一个并查集维护关系. 同时记录联通块的数量,大于 $k$ 的时候照样维护关系. 如果已经等于 $k$ ,直接找到第一条两端点不在同一联通块的边输出就好. Cod
阅读全文
摘要:"题目链接" Solution 基本上就是个板子. 因为 $n$ 很小,只有 $2000$,所以直接暴力建图,然后跑最小生成树就好了. Code cpp include define ll long long using namespace std; const int maxn=2008; str
阅读全文

浙公网安备 33010602011771号