概念: 就是将数组中数经过树状排列后, 如果寻找两个数是否属于同一合, 直接找是否属于同一根节点子树就可以。 路径压缩和按秩合并 路径压缩: 在每次执行 \(get\) 操作同时, 把访问过每个节点(也就是所元素祖先,都直接指向树根) 每次 \(get\) 均摊复杂度 ...
转载 2021-10-10 11:30:00
574阅读
2评论
     比如食物链中,更新时就是模3,需要找到之间规律    另外还有一种方法,就是建立三倍,第一个是A, 第二个是B,第三个是C,输入关系时,把同类和天敌输入,可以利用传递性,A->B B->C可以传递到关系C->A这也正是题目所希望其次,建立集合时,关系是对称,所以查询时只需查询一个集合里是否是同类,或者查询某两个集合是否是天敌就
转载 2021-03-18 16:33:04
369阅读
2评论
1 #include 2 #include 3 using namespace std; 4 int f[1000010]; 5 int sum[1000010]; 6 int find(int x) 7 { 8 if(x!=f[x]) 9 { 10 int pre=f[x];//pre是x一个父节点。 11 f[x]=find...
原创 2021-07-15 11:13:46
254阅读
更全内容详见全面讲解 内容: 我们可以在边上
转载 2021-08-08 19:14:00
81阅读
2评论
 种类例题:种类 洛谷 P2024 食物链对于这三种种类,同类可以用0表示,其他两种分别用1表示该结点被父节点吃,2表示该节点吃
原创 2023-02-07 12:52:08
250阅读
由一个整数型数组和两个函数构成。数组pre[ ]记录了每个点前导点是什么,函数find是
原创 2022-06-17 12:50:57
402阅读
集合并-查找问题在说之前,我们先讲一下合并-查找问题合并-查找问题。顾名思义,就是既有合并又有查找操作问题举个例子:有一群人,他们之间有若干好友关系如果A是B好友好友,或者好友好友好友等等,即通过若干好友可以认识,那么我们说A和B是间接好友。如果两个人有直接或者间接好友关系,那么我们就说他们在同一个朋友圈中随着时间变化,这群人中有可能会有新朋友关系,比如A和C变成
我们为什么要学习呢?我们知道,对于普通而言,它反映是集合与集合之间关系(即元素是否处于这个集合),相当于是一个无权图,而集合内元素之间关系并没有表明。如果我们一旦想体现出集合中元素之间相互关系,即边,那么普通必然不能实现,所以就出来了。它不仅记录集合关系,还记录着集合内元素关系或者说是集合内元素连接线。 这个本质实际上就是一个图。
1. 不带权重三个操作: 初始化, 查找, 合并.#include <iostream>#include <cstdio>#include <cmath>using namespace std;const int MAX_SIZE=1002;int Set_father[MAX_SIZE];int Set_Count[MAX_SIZE];void Initialization()
原创 2021-08-31 15:54:23
134阅读
s://blog.csdn.n...
原创 2023-02-08 07:50:59
71阅读
题目:Wireless Network 题意:给定n台已损坏计算机位置和计算机最远通信距离d,然后分别根据命令执行以下两种操作: 输出:能通信则输出"SUCCESS",否则输出"FAIL" 题解: 还是那个重要知识点——关系。 此题,我们使用一个repair数组存储每台电脑状态(损坏
转载 2017-08-11 18:10:00
83阅读
2评论
题目链接:http://acm.hdu.edu.cn/showproblem.php?pid=2818思路:Count[i]表示i下面的积木个数,路径压缩时候更新一下即可,sum[i]表示以i为根积木个数。 1 #include<iostream> 2 #include<cstdio> 3 #include<cstring> 4 #include<algorithm> 5 using namespace std; 6 #define MAXN 30000+30 7 int parent[MAXN]; 8 int sum[MAXN],Coun
转载 2013-06-10 11:07:00
120阅读
2评论
题目链接:http://acm.hdu.edu.cn/showproblem.php?pid=3047思路:冲突条件是:两个人坐在同一行,同时他们到根节点差值等于他们之间差值,这时就产生冲突了。于是我们可以用一个dist数组来保存节点到根距离,而这个距离在路径压缩时候更新一下就可以了,dist[x]+=dist[parent[x]]。然后就是合并后距离,令r1=Find(u),r2=Find(v),于是合并时就有parent[r2]=r1,dist[r2]=dist[u]+w-dist[v]。盗用一张图: 1 #include<iostream> 2 #include&
转载 2013-06-10 09:55:00
117阅读
2评论
题目链接:http://acm.hdu.edu.cn/showproblem.php?pid=3038思路:sum[x]表示区间[x,f[x]]和,这个可以在路径压缩时候更新,对于一组数据(u,v,w),令r1=Find(u),r2=Find(v),于是若r1==r2,此时u,v就有了相同参考点,而sum[u]为区间[u,r1(r2)]和,sum[v]为区间[v,r2(r1)]和,于是只需判断w==sum[v]-sum[u]即可;若r1<r2,此时可以分为两种情况,(u,v,r1,r2)或者(u,r1,v,r2),对于情况1来说,此时father[r1]=r2,sum[r1]=
转载 2013-06-08 11:07:00
41阅读
2评论
#include#include#define N 200100struct node {int x,count;}pre[N];int find(int n) {if(n!=pre[n].x) {int h=pre[n].x;pre[n].x=find(pre[n].x);pre[n].count...
转载 2013-12-01 18:12:00
27阅读
\(\huge \) \(\Large\rm 算法简介\) $\quad$可以用来维护一类具有传递性关系,维护形如将 \(x\) 与 \(y\) 所在集合合并和询问 \(x\) 和 \(y\) 是否在同一个集合操作。 \(\large\rm 查询祖先节点\) $\quad$对于普通 ...
转载 2021-08-25 08:03:00
111阅读
2评论
题意:有n个结点,给出了q个操作,操作是a b string表示结点a到结点b和是奇数或偶
原创 2023-06-29 00:06:35
67阅读
题意:动物王国中有三类动物A,B,C,这三类动物食物链构成了有趣环形。A吃B, B吃C,C吃
原创 2023-06-29 00:07:06
32阅读
食物链 Time Limit: 1000MS Memory Limit: 10000K Total Submissions: 71361 Accepted: 21131 Description 动物王国中有三类动物A,B,C,这三类动物食物链构成了有趣环形。A吃B, B吃C,C吃A。 现有N个动
转载 2017-05-05 16:03:00
95阅读
2评论
区间统计例题:HDU  Zjnu Stadium(模板)       HDU 3038 How Many Answers Are Wrong与普通不同是新增加一个属性: dist[a]:表示
原创 2023-02-07 12:51:57
88阅读
  • 1
  • 2
  • 3
  • 4
  • 5