随笔分类 -  图论-生成树

摘要:"题目链接" Solution 有几点关键,首先,可以证明次小生成树一定是由最小生成树改变一条边而转化来. 所以需要枚举所有非最小生成树的边$(u,v)$.并且找到 $u$ 到 $v$ 的边中最大边和次大边. 为什么要找次大边呢?? 因为可能最大边与要替换的边长度相等,那么这种条件生成的便不是严格的 阅读全文
posted @ 2018-09-06 14:41 Kevin_naticl 阅读(366) 评论(0) 推荐(1)
摘要:"题目链接" Solution $Kruskal$ . 一直维护生成树,同时记录一下联通块数量. 如果联通块数量为 $s+1$,那么直接结束. 最后输出答案即可. Code cpp include define db double using namespace std; const int max 阅读全文
posted @ 2018-09-05 16:28 Kevin_naticl 阅读(230) 评论(0) 推荐(1)
摘要:"题目链接" 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' 阅读全文
posted @ 2018-09-05 10:55 Kevin_naticl 阅读(274) 评论(0) 推荐(0)
摘要:"题目链接" Solution $Trie$ 树 + 启发式合并. 考虑到是异或,于是按位贪心.让高位的尽量相同. 然后要计算每棵子树的代价,似乎并没有很好的方法?? 于是只能启发式合并. 对于每一个有两个子节点的点; 将 $siz$ 较小的点中的值放到 $siz$ 较大的子树中去查询即可. 时间复 阅读全文
posted @ 2018-09-04 21:32 Kevin_naticl 阅读(773) 评论(0) 推荐(1)
摘要:"题目链接" Solution $Kruskal$ 加一点点东西就好... $n$ 很小,可以暴力搞出所有的边. 然后按照边的大小排序. 用一个并查集维护关系. 同时记录联通块的数量,大于 $k$ 的时候照样维护关系. 如果已经等于 $k$ ,直接找到第一条两端点不在同一联通块的边输出就好. Cod 阅读全文
posted @ 2018-09-03 14:54 Kevin_naticl 阅读(154) 评论(0) 推荐(1)
摘要:"题目链接" Solution 基本上就是个板子. 因为 $n$ 很小,只有 $2000$,所以直接暴力建图,然后跑最小生成树就好了. Code cpp include define ll long long using namespace std; const int maxn=2008; str 阅读全文
posted @ 2018-09-03 10:44 Kevin_naticl 阅读(340) 评论(0) 推荐(1)