
ACM-并查集&MST
Helios_nannan
得失成败,都只对自己交代
展开
-
hdu 1231 畅通工程 并查集初步
传送门:hdu 1231 畅通公路 中文题目就不做过多的解释了解题思路这个题目主要考察的并查集简单合并和查找,没有压缩路径。 但是在这里说一下路径压缩的两种方法(递归和非递归) 递归:int find(int x){ return pre[x] = (x!=pre[x])?find(pre[x]):pre[x];}非递归的就相对来说有点麻烦了int find(int x){原创 2016-07-23 12:10:43 · 304 阅读 · 0 评论 -
hdu 1272 小希的迷宫 并查集
传送门:小希的迷宫 中文题目不做过多的解释解题思路输出yes的条件就是: 1. 只能是一个树 2. 树中不能有环 当然还有一个特判就是只输入0,0的时候也输出yes,当然这个题目的数据弱,考虑重复添加遍的情况,比如输入3,5和5,3应该是满足条件的,不判断也是可以过的#include<cstdio>#include<cstring>const int MAXN = 100005;int原创 2016-07-23 14:52:15 · 383 阅读 · 0 评论 -
poj 1258 Agri-Net 基本&经典最小生成树
传送门:poj 1258 Agri-Net题目大意n个农场,已知这n个农场都互相相通,有一定的距离,现在每个农场需要装光纤,问怎么安装光纤能将所有农场都连通起来,并且要使光纤距离最小,输入的是邻接矩阵,输出安装光纤的总距离解题思路裸prim, 1. 随便找一个元素进行寻找 2. 找出和这个元素相邻的所有权值,如果不能到达表示无限大 3. 找到和这个元素相邻的最小权值,记录下来 4. 最小权值原创 2016-07-23 20:56:06 · 319 阅读 · 0 评论 -
hdu 2122 Ice_cream’s world III 最小生成树kruskal+并查集
传送门:hdu 2122题目大意判断输入的几个节点能不能组成最小生成树,如果能输出最小生成树的值,如果不能疏忽impossible解题思路刚开始用的prim一直WA一直WA就改为kruskal了,就kruskal果断过了! kruskal和prim不同的是,prim主要是针对节点的,也就是把节点加入集合里面,kruskal是把边也就是权值从小到大的加入到集合里面,如果这两个边不在同一个连通分量里面原创 2016-07-24 00:50:07 · 387 阅读 · 0 评论 -
Codeforces292D Connected Components 经典好题并查集
传送门:Codeforces292D Connected Components题目大意一个无向图,给出m条边,有k次询问,每次询问将第l到r条边暂时删去,求这时候有多少个连通分量。解题思路最朴素的思想,每次查询[a,b]的时候的时候,把从1到a-1和从b+1到最后做并查集,然后看有几个连通分量。但是很不幸的是这种做法的复杂度太高了,是o(m*n). 我们可以换一个想法用PL[i]这个数组存储前i个原创 2016-07-26 01:28:51 · 639 阅读 · 0 评论 -
POJ 1611 The Suspects (并查集)不相交集合+合并优化
传送门:POJ 1611 The Suspects (并查集)题目大意有很多组学生,在同一个组的学生经常会接触,也会有新的同学的加入。但是SARS是很容易传染的,只要在改组有一位同学感染SARS,那么该组的所有同学都被认为得了SARS。现在的任务是计算出有多少位学生感染SARS了。假定编号为0的同学是得了SARS的。解题思路向这种题目明显是并查集的一种变形叫不相交并查集。 父节点里面保存的是元素的原创 2016-07-26 01:40:07 · 387 阅读 · 0 评论 -
hdu 3367 Pseudoforest 最大生成树
传送门:Pseudoforest题目大意就是求最大生成树,但是前提是要组成一个环解题思路按照边的最大到小排序一下,当变为一个环的时候就是要求的最大生成树,当然肯定不是当变为一个环就退出,当变为两个环的时候就不加这个边了,直到结束!AC代码#include<cstdio>#include<cstring>#include<algorithm>using namespace std;const原创 2016-07-26 01:51:34 · 356 阅读 · 0 评论 -
hdu 5441 Travel 离线操作+并查集
#include<cstdio>#include<cstring>#include<algorithm>using namespace std;const int MAXN = 5005;const int INF = 0x3f3f3f3f;int pre[MAXN<<2];int M,N;struct Node{ int a,b,val;}e[MAXN<<5];bool原创 2016-07-26 01:57:31 · 348 阅读 · 0 评论