
并查集
文章平均质量分 66
Unin88
这个作者很懒,什么都没留下…
展开
-
Uva 3027 Corporative Network
本题只查询结点到根节点的距离,所以每颗树除了根节点不能换之外,其他结点的位置可以任意改变,这恰好符合并查集的特点,但是需要记录附加信息。如果记录每个结点到根节点的距离,那么每次I操作都要更新很多结点的信息,时间复杂度难以保证,因此考虑记下每个结点到父结点的距离为d[i],然后在路径压缩是维护这个数组d。#include #include #include #include #inclu原创 2015-01-31 17:53:24 · 465 阅读 · 0 评论 -
hdu 1198 Farm Irrigation
acm.hdu.edu.cn/showproblem.php?pid=1198较为隐蔽的并查集题目,但是分析发现还是统计集合个数的问题,需要注意的是集合的合并是有条件的,满足条件的合并,不满足的不合并。#include #include #include #include using namespace std;const int MAX = 500;int n,m,cnt原创 2015-01-02 15:59:18 · 364 阅读 · 0 评论 -
hdu 1213 How Many Tables
acm.hdu.edu.cn/showproblem.php?pid=1213简单并查集,统计集合个数类型AC代码:#include #include #include #include using namespace std;const int MAX = 1010;int n,m,father[MAX];void Init(){ for(int i=0; i<原创 2015-01-02 13:38:01 · 310 阅读 · 0 评论 -
hdu 1811 Rank of Tetris
acm.hdu.edu.cn/showproblem.php?pid=1811看了题之后觉得等于这种关系无法建边,但是觉得这个题实在是像拓扑排序的调调,终于发现可以把等号这种关系的点化成一个点考虑,这就使用到并查集。AC代码:#include #include #include #include #include #include using namespace std;原创 2015-01-03 12:49:57 · 356 阅读 · 0 评论 -
hdu 3172 Virtual Friends
acm.hdu.edu.cn/showproblem.php?pid=3172萌萌哒并查集水题!唯一需要注意一点点的是使用map容器为名字赋予一个编号便于操作!AC代码:#include #include #include #include #include using namespace std;map mm;const int MAX = 100010;ch原创 2015-01-02 10:47:16 · 372 阅读 · 0 评论 -
hdu 1232 畅通工程
acm.hdu.edu.cn/showproblem.php?pid=1232可以使用并查集解决,每一堆隶属于一个结点的点相当于一个新点,因为只要能到达其中一个就能到达这个集合中所有的点。AC代码:#include #include #include #include using namespace std;int n,m,father[1010];void Init原创 2015-01-02 11:35:22 · 389 阅读 · 0 评论 -
hdu 1272 小希的迷宫
判断是不是连通且无环的无向图:1.只能有一个根结点2.同一条边上的点父亲不能相同AC代码:#include #include #include #include using namespace std;const int MAX = 100010;bool vis[MAX];int father[MAX];void init(){ for(int i=0;原创 2015-04-05 10:53:40 · 405 阅读 · 0 评论 -
hdu 1598 find the most comfortable road
题意给出n个点m条边以及边的权值,求出点a到点b的一条路,这条路上所有边的最大值-最小值的值最小。这个题有两种做法:1.二分+最短路:枚举差值和最小值。2.并查集+Kruscal:排序后,枚举每一条边。AC代码(第二种做法)#include #include #include #include using namespace std;const int INF原创 2015-04-06 22:14:22 · 500 阅读 · 0 评论 -
hdu 3938 Portal
题意描述简单的讲就是,给你一张无向图,求有多少条路径使得路径上的花费小于L,这里路径上的花费是这样规定的,a、b两点之间的多条路径中的最长的边最小值!题目分析因为考虑到数据的大小所以需采用离线算法先计算出结果后在统一输出结果。这里首先要从a到b的所有路径中筛选出这样一条路径(路径中的最长边是所有路径中最小),那么这就需要采用最小生成树kruskal的思想,那么任意两个集合A,B之间可以原创 2015-04-07 22:24:23 · 614 阅读 · 0 评论