最小生成树
青烟绕指柔!
我不怕千万人阻挡,只怕自己投降。
展开
-
[JLOI2015]管道连接
题目链接:[JLOI2015]管道连接我们先对每个特殊点集求出构成一颗斯坦纳树的最小代价。然后对于答案来说,是一颗最小代价的斯坦纳森林。所以我们最后枚举每种集合的斯坦纳树来组合成斯坦纳森林即可。要注意转移的合法性。当前集合要被拆分成几颗不同频率的生成树,并且这些频率的点被全部包含才可以转移。AC代码:#pragma GCC optimize("-Ofast","-funroll-all-loops")#include<bits/stdc++.h>//#define int lon原创 2021-01-18 14:54:34 · 237 阅读 · 0 评论 -
Roads
题目链接:Roads容易发现,答案就是有可能出现在MST上面的边,然后使其不在同一个联通块中的最小切边数。所以我们把所有可能出现在MST上面的边全部加进来,求一个全局最小割,StoerWagner即可。判断边是否可能在MST上面出现,我们先对边排序,对于相同权值的点一起看,只要当前这两个端点未被连通则可以出现。各种倍增判断当然也是ok的,只是比较麻烦。AC代码:#pragma GCC optimize("-Ofast","-funroll-all-loops")#include<bi原创 2020-07-24 14:44:49 · 294 阅读 · 0 评论 -
Mountaineers
题目链接:Mountaineers最大值最小的路径肯定在MST上面,那么我们直接求一个MST然后就是任意两点之间的树上路径最小值即可。树上倍增即可。但是要注意同一个点的情况。AC代码:#pragma GCC optimize("-Ofast","-funroll-all-loops")#include<bits/stdc++.h>//#define int long longusing namespace std;const int N=3e5+10,M=N<<1原创 2020-07-05 20:17:06 · 401 阅读 · 0 评论 -
Inheritance
题目链接:Inheritance比较有趣的一道题,如果我们暴力去做复杂度是:O(m*k/n),会被n很小的时候卡掉。所以我们考虑对每个人维护一个并查集。然后枚举边,从大到小,然后找到第一个未连通的,然后连接上,复杂度也是很高的,但是我们可以发现未连通的是具有二分性的,二分即可。AC代码:#pragma GCC optimize("-Ofast","-funroll-all-loops")#include<bits/stdc++.h>//#define int long long原创 2020-06-28 13:22:04 · 134 阅读 · 0 评论 -
[APIO2008]免费道路
题目链接:[APIO2008]免费道路显然要找一颗生成树。显然,对于鹅卵石的路,我们可以找到一些必须要加的边,否则会使得路不连通。怎么找必须加的边呢?先把水泥路加上,看使得连通还需要加的边即可。所以加上必须加的边之后,再加几条直至k条鹅卵石边。然后再加上水泥路。AC代码:#pragma GCC optimize("-Ofast","-funroll-all-loops")#include<bits/stdc++.h>//#define int long longusing原创 2020-05-26 14:48:25 · 253 阅读 · 0 评论 -
[HNOI2006]公路修建问题
题目链接:[HNOI2006]公路修建问题显然可以二分。二分一个最大值之后,只要能建造1级公路肯定直接建造,然后看能不能建k条。然后能建2级公路就建造,然后看能不能形成一颗树即可。AC代码:#pragma GCC optimize("-Ofast","-funroll-all-loops")#include<bits/stdc++.h>//#define int long longusing namespace std;const int N=2e4+10;int n,k原创 2020-05-26 11:07:30 · 205 阅读 · 0 评论 -
Codeforces - Maximum Distance
题目链接:Codeforces - Maximum Distance显然就是把k个特殊点连接在一起的最小边的最大值。所以明显的MST,但是我们怎么快速判断当前k个点已经两两可达了呢?我们维护一个sz即可,这个就是表示当前是否有k个点中的点在其中。然后这种一共连接k-1次。AC代码:#pragma GCC optimize("-Ofast","-funroll-all-loops")#...原创 2020-04-03 09:59:38 · 210 阅读 · 0 评论 -
Codeforces - MST Unification
题目链接:Codeforces - MST Unification先求MST,然后对于每一条不在MST上面的边。如果小于等于当前MST上面这两点之间的最大值,那么肯定可以通过替换边,使得MST不唯一。所以需要变为MAX+1。所以我们需要求树上任意两点的max,树上倍增即可。本来想LCT的,有点失了智。AC代码:#pragma GCC optimize("-Ofast","-funro...原创 2020-02-21 16:36:25 · 223 阅读 · 0 评论 -
Codeforces - Make It Connected
题目链接:Codeforces - Make It Connected假设没有多余的边,我们怎么求MST呢?肯定是从最小的点往其他点连边。那么加上这M条边,再跑个kruskal就可以了。AC代码:#pragma GCC optimize("-Ofast","-funroll-all-loops")#include<bits/stdc++.h>#define int lo...原创 2020-02-20 18:59:50 · 167 阅读 · 0 评论 -
[USACO 2001 OPEN]地震
题目链接:[USACO 2001 OPEN]地震一道01分数规划,在生成树上面也被称为最优比例生成树。我们要使:F - Σ Ci / Σ Ti -> 最大化简可得:令 g(x) = F - Σ Ci - x * Σ Ti ,只要x是单调递增的,g(x)大于0就可以更新答案。于是二分x即可。AC代码:#pragma GCC optimize("-Ofast","-...原创 2020-01-31 10:55:29 · 201 阅读 · 0 评论 -
bzoj 2753 - [SCOI2012]滑雪与时间胶囊
2753: [SCOI2012]滑雪与时间胶囊Time Limit: 50 Sec Memory Limit: 128 MBSubmit: 3481 Solved: 1268[Submit][Status][Discuss]Descriptiona180285非常喜欢滑雪。他来到一座雪山,这里分布着M条供滑行的轨道和N个轨道之间的交点(同时也是景点),而且每个景点都有一编号i(1&l...原创 2019-12-16 19:36:17 · 190 阅读 · 0 评论 -
2019ICPC南昌 Bob's Problem
题目链接:Bob’s Problem题意:就是给你一些白边和一些黑边,让你随便选,但是白边不超过k条。很明显黑边能选就选,然后白边贪心从大往小,先从大到小让整个图连通,然后从大到小选没选过的即可。AC代码:#pragma GCC optimize(2)#include<bits/stdc++.h>#define int long longusing namespace ...原创 2019-12-08 21:22:12 · 654 阅读 · 0 评论 -
bzoj - 2654 wqs二分
2654: treeTime Limit: 30 Sec Memory Limit: 512 MBSubmit: 4829 Solved: 2093[Submit][Status][Discuss]Description给你一个无向带权连通图,每条边是黑色或白色。让你求一棵最小权的恰好有need条白色边的生成树。题目保证有解。Input第一行V,E,need分别表示点数,边数和...原创 2019-11-08 11:10:20 · 255 阅读 · 0 评论 -
Codeforces - B. 0-1 MST
B. 0-1 MSTtime limit per test1 secondmemory limit per test256 megabytesinputstandard inputoutputstandard outputUjan has a lot of useless stuff in his drawers, a considerable part of which are his...原创 2019-11-07 23:27:28 · 526 阅读 · 0 评论 -
bzoj 2561 - 最小生成树
2561: 最小生成树Time Limit: 10 Sec Memory Limit: 128 MBSubmit: 2966 Solved: 1370[Submit][Status][Discuss]Description 给定一个边带正权的连通无向图G=(V,E),其中N=|V|,M=|E|,N个点从1到N依次编号,给定三个正整数u,v,和L (u≠v),假设现在加入一条边权为L的...原创 2019-11-03 16:30:47 · 190 阅读 · 0 评论 -
HDU - 5627 Clarke and MST
Clarke and MSTTime Limit: 2000/1000 MS (Java/Others) Memory Limit: 65536/65536 K (Java/Others)Total Submission(s): 708 Accepted Submission(s): 408Problem DescriptionClarke is a patient with ...原创 2019-10-28 11:02:58 · 290 阅读 · 2 评论 -
畅通工程再续
相信大家都听说一个“百岛湖”的地方吧,百岛湖的居民生活在不同的小岛中,当他们想去其他的小岛时都要通过划小船来实现。现在政府决定大力发展百岛湖,发展首先要解决的问题当然是交通问题,政府决定实现百岛湖的全畅通!经过考察小组RPRush对百岛湖的情况充分了解后,决定在符合条件的小岛间建上桥,所谓符合条件,就是2个小岛之间的距离不能小于10米,也不能大于1000米。当然,为了节省资金,只要求实现任意2个小...原创 2019-04-05 13:23:09 · 123 阅读 · 0 评论 -
牛客假日团队赛1---Superbull
题目链接链接:https://ac.nowcoder.com/acm/contest/918/G来源:牛客网题目描述Bessie and her friends are playing hoofball in the annual Superbull championship, and Farmer John is in charge of making the tournament as...原创 2019-06-12 15:23:28 · 349 阅读 · 0 评论 -
HDU - 3002 King of Destruction(全局最小割)
King of DestructionTime Limit: 2000/1000 MS (Java/Others) Memory Limit: 32768/32768 K (Java/Others)Total Submission(s): 1545 Accepted Submission(s): 643Problem DescriptionZhou xingxing is th...原创 2019-09-22 23:08:41 · 236 阅读 · 0 评论 -
Tachibana Kanade Loves Review
题目链接:Tachibana Kanade Loves Review一道最小生成树好题。考虑建图:建立一个虚拟节点,对于已经完成的k个知识点,我们直接让虚拟节点与其相连。然后对于m个关系,我们让其相连,最后求最下生成树即可。(可自己证明正确性)。不过这道题卡常很恶心,我们可以玄学并查集的merge,因为数据很有可能卡我们并查集,卡成一条链,然后我们就随机合并,既可以保证近似的log的...原创 2019-09-25 21:45:56 · 175 阅读 · 0 评论 -
还是畅通工程
某省调查乡村交通状况,得到的统计表中列出了任意两村庄间的距离。省政府“畅通工程”的目标是使全省任何两个村庄间都可以实现公路交通(但不一定有直接的公路相连,只要能间接通过公路可达即可),并要求铺设的公路总长度为最小。请计算最小的公路总长度。INPUT测试输入包含若干测试用例。每个测试用例的第1行给出村庄数目N ( < 100 );随后的N(N-1)/2行对应村庄间的距离,每行给出一对正整数...原创 2019-04-05 13:02:53 · 216 阅读 · 0 评论