
图论----最小生成树
#
夕林山寸
这个作者很懒,什么都没留下…
展开
-
2020牛客暑期多校训练营(第五场)BDEFI
F:模拟即可,记得开long long#include <bits/stdc++.h>using namespace std;typedef long long ll;#define ls (o<<1)#define rs (o<<1|1)#define pb push_backconst double PI= acos(-1.0);const int M = 1e5+7; ll a[110];int main(){ ll n;原创 2020-07-25 18:02:07 · 569 阅读 · 4 评论 -
算法竞赛——进阶指南——acwing 356. 次小生成树 kruskal + 倍增 +最值 lca
实现比较考验码力的一道题。思路比较简单:先建立出一颗MST,求出边权和ans,然后枚举非MST的边(x-y边权为w),与MST构成的环,求出换上最大边权mx,次大边权mc。若mx!=w,则次小生成树可能为:ans-mx+w;否则,次小生成树可能为:ans-mc+w;注意这里次大是严格次大。其实就是相当于求MST上 x-y路径中边权最大与次大值。可以类比距离求lca。 用倍增维护。然后就是经典合并最大次大。可以分类讨论或者直接开一个小数组sort。具体实现看代码。这原创 2020-06-17 15:37:14 · 248 阅读 · 0 评论 -
算法竞赛——进阶指南——acwing349. 黑暗城堡 dij最短路思想+primMST思想
最短路径树问题:这题必须满足,dis[1][j]==d[j] (dis[1][j]表示1-j的距离,d[j]表示最终生成的树1-j的距离)思路:我们按dis[1][j]从小到大的顺序一个一个点的放进最终树的集合S中:每次插入的点x,只要在集合中的点j满足 a[x][j]+dis[1][j]==dis[1][x],这条边就是可以连接的。 每次插入点都会优若干个边可以连接。根据乘法原理,依次相乘就是最终方案数(排列不会影响最终方案,点数加入顺序不影响方案,影响方案的只是边连接的方法!!).原创 2020-05-21 23:19:12 · 229 阅读 · 0 评论 -
算法竞赛——进阶指南——acwing348. 沙漠之王 最优比率生成树+prim
思路就是最优比率生成树+prim主意好细节。#include <bits/stdc++.h>using namespace std;typedef long long ll;#define ls (o<<1)#define rs (o<<1|1)#define pb push_backconst double PI= acos(-1.0);const int M = 1e3+7;const double eps=1e-8;struct node原创 2020-05-21 16:01:14 · 236 阅读 · 0 评论 -
最优比率生成树模板
https://blog.youkuaiyun.com/bjfu170203101/article/details/105603013分析类似于我之前写的博客。只是加入Kruskal的算法思想#include <bits/stdc++.h>using namespace std;typedef long long ll;#define ls (o<<1)#define rs (o<<1|1)#define pb push_backconst double P原创 2020-05-20 21:57:37 · 236 阅读 · 0 评论 -
算法竞赛——进阶指南——acwing347. 野餐规划 MST思想+树形dp 限制最小生成树
由于连1的边有限制,先删去1,把其他点所在联通块Kruskal一下。然后把1连向这t个联通块,然后还剩S-T条边可以连1.每次找到一个点j使得 d[1][j]-dp[j].w 最大 (其中dp[j].w为1-j路径上权值最大的边的权值)这样就能用1-j这条边替换最大边。使得ans减小。执行S-T次即可,。#include <bits/stdc++.h>using namespace std;typedef long long ll;#define ls (o...原创 2020-05-20 18:47:01 · 565 阅读 · 0 评论 -
算法竞赛——进阶指南——acwing346. 走廊泼水节 Kruskal 过程+分析
模拟Kruskal的过程发现:每次选择一条边u->v会让其他未连接的边的下限都提升到 w+1 (联通快内部的所有边默认连接)我们每次操作,发现:u所在联通快(假设已经全部联通),v所在联通块(假设已经全部联通)之间的所有边。除了u-v连接 且边权为w,其他均不是给出的边。(否则就会成环)而其他边必须满足 边权大于w(否则到这步时就不会选到u-v了,不满足题意),然后连接这些边,把贡献加到答案里,我们得到的时若干个内部完全连接的联通块。重复上述操作,即可得到最终答案。...原创 2020-05-20 12:28:34 · 168 阅读 · 0 评论 -
cf888 G. Xor-MST Boruvka算法 + tire 树+贪心
很明显的Boruvka题。现在目的就是快速找到某个联通块连出的权值最小的边。。显然 用字典树不可做。。我们仔细观察条件,按位异或,自然的想到从高位开始。把最高位为0的和为1的分成2组,这两组之间连一条权值最小的边,其他内部连,一定是最优解。。(根据Boruvka的思想)其实不需要知道Boruvka算法,只需要知道这样是对的就行。。证明显然。。然后分成两个联通块,分治下去搞...原创 2020-02-14 22:32:55 · 362 阅读 · 0 评论 -
Boruvka算法 ——最小生成树
出了K和P算法以外 还有一种B算法 求MST;核心思想:如果仅剩两个联通块,那么MST的最后一个边。一定是连接这两个联通块的所有边中边权最小的边。大体思路是:首先所有点都设成一个联通块1.遍历所有联通块,找出该联通块的点连向其他联通快的边,边权最小的一个;2.MST一定选中这条边,连接联通块。重复1.2操作知道联通块只剩一个,即所有点联通,连出了一个MST。由于一次操作...原创 2020-02-14 20:03:38 · 1139 阅读 · 0 评论