
最小生成树
cqbz_ChenJiage
这个作者很懒,什么都没留下…
-
原创 构造完全图 题解
题目链接分析假设有如下图两个集合 xxx & yyy。因为要构造一个完全图,所以应该将xxx中的s[x]s[x]s[x]个节点与yyy中的s[y]s[y]s[y]个节点一一连接即连接s[x]∗s[y]−1s[x] * s[y] - 1s[x]∗s[y]−1(此处减一是为了在后面单独处理原图中的dis[i].wdis[i].wdis[i].w)个节点,为了保证此完全图的最小生成树所以要用(s[x]∗s[y]−1)∗(dis[i].w+1)(s[x] * s[y] - 1) * (dis[i].w2020-08-17 20:56:1647
0
-
原创 秘密的牛奶运输 题解
题目连接分析一道可以暴力水过去的次小生成树step1首先用KruskalKruskalKruskal||PrimPrimPrim求出原图的一颗最小生成树,在连边的时候,用一个visvisvis记录一下那些已经在最小生成树里面。step2提前暴力dfsdfsdfs或者bfsbfsbfs求出任意两点构成的环之间的最大权值具体操作定义函数dfs(ints,intu,intfather,intmw1,intmw2)dfs(int s, int u, int father, int m2020-08-17 20:55:3931
0
-
原创 「一本通 3.1 练习 4」Tree 题解
题目地址分析第一眼看到此题,感觉就是一道水题,直接加上前needneedneed小的白边就行了,再处理到n−1n-1n−1条黑边,但是,打完后突然发现有问题。。。 虽然加上了前needneedneed小的白边,但是会出现树不连通的现象,即无法构成生成树。正解思路二分一个增量midmidmid(可正可负)。跑一遍KruskalKruskalKruskal,将所有的白边都加上aaa,记录构成生成树后所用到的白边,如果数量小于needneedneed就将右端点往左移,否则往右移。最后的ansansan2020-08-17 20:55:0810
0
-
原创 From Hero to Zero 题解
题目地址分析考试时的一道水题但是还是没拿满,按题目意思模拟即可#include <cstdio>#include <iostream>#include <algorithm>#define LL long longusing namespace std;LL t, n, k, step;int main() {// freopen("game.in", "r", stdin);// freopen("game.out", "w", stdout)2020-08-17 20:54:3819
0
-
原创 SCOI 滑雪与时间胶囊 题解
SCOI 滑雪与时间胶囊题目描述a180285 非常喜欢滑雪。他来到一座雪山,这里分布着MMM条供滑行的轨道和NNN个轨道之间的交点(同时也是景点),而且每个景点都有一编号i(1<=i<=n)i(1<=i<=n)i(1<=i<=n)和一高度$。a180285能从景点。a180285 能从景点。a180285能从景点i滑到景点滑到景点滑到景点j当且仅当存在一条当且仅当存在一条当且仅当存在一条i和和和j之间的边,且之间的边,且之间的边,且i的高度不小于的高度不小于的高度2020-08-15 21:10:1323
0
-
原创 最小生成树 学习笔记1 - Kruskal
最小生成树定义Kruskal算法算法流程具体实现建立结构体存边并查集维护完整代码定义给定一个带权图,满足以下条件:1.保证图中所有的点都联通2.在满足条件1的情况下尽可能去掉多的边,使得所有的边权之和最小,即Σi=1i<=mwi\Sigma_{i=1}^{i<=m}w_iΣi=1i<=mwi最小。Kruskal算法Kruskal是基于贪心的思想,根据以上的定义描述依次枚举1−m1-m1−m条边,如果两个点没有存在于一个连通分量中,那么就连上这一条边。此算法的难点在于查2020-08-05 18:34:5661
0