带权并查集

来源:互联网 发布:java版qq2008 编辑:程序博客网 时间:2024/05/16 00:50

来自:http://blog.csdn.net/Chris_zzj/article/details/52227656

并查集

并查集是一个很高效算法,理解起来也很简单,写起来更简单。

①fat[i] = i;

②找到一个点的祖先

int findfat(int x){if(fat[x] == x) return x;return findfat(fat[x]);}


③二中的方法肯定不好,因为如果数据比较极端,那么并查集就退化成一个链了

如果加入了路径压缩,并查集这个算法就更高效了。


int findfat(int x)//递归写法{if(fat[x] == x) return x;fat[x]=findfat(fat[x]);return findfat(fat[x]);}

int findfat(int x)//非递归写法 更好,因为不会RE{int root=x;while(root != fat[root])//先要找到根节点r {root=fat[root];}int y=x;while(y!=root){int fath=fat[y];fat[y]=root;y=fath;}return r;}

④合并

void join(int x,int y){int fatx=findfat(x),faty=findfat(y);if(fatx != faty){fat[fatx]=faty;}}

带权并查集

带权值的并查集只不过是在并查集中加入了一个value[ ]数组
value[ ]可以记录很多种东西,不一定是类似距离这种东西,也可以是相对于根节点的状态
加入了权值,函数应该有一些改变
①找到一个点的祖先

int findfat(int x){if(fat[x] == x) return x;int tmp=fat[x];fat[x]=findfat(fat[x]);//在此处修改val比如:value[x]=value[tmp]+1;return fat[x]; }





原创粉丝点击
热门问题 老师的惩罚 人脸识别 我在镇武司摸鱼那些年 重生之率土为王 我在大康的咸鱼生活 盘龙之生命进化 天生仙种 凡人之先天五行 春回大明朝 姑娘不必设防,我是瞎子 总有大便的感觉怎么办 黎明杀机无网络连接怎么办 监控视频电脑播放不了怎么办 绝地手游击倒了怎么办? 绝地求生全军出击倒地后怎么办 黑魂3杀了npc怎么办 菜刀背容易割手怎么办 商铺厨房太热怎么办 农村自建房厨房卫生间怎么办 宾利车门不会开怎么办 两岁的宝宝好动怎么办 被别人坏了名声怎么办 在单位混臭了怎么办 在公司名声臭了怎么办 怀孕三个月吐的厉害怎么办 孕38周轻微贫血怎么办 孕38周中度贫血怎么办 孕38周贫血严重怎么办 孕38周有点贫血怎么办 脚被热水烫红了怎么办 学员练车撞死人怎么办 三胎意外来了该怎么办 因为飞机延误耽误行程怎么办 伤了朋友的心怎么办 羊蹄被绳子缠肿了怎么办 新老师教的不好怎么办 跟老公三观不合怎么办 突然有社保补扣怎么办 街头篮球篮板反应慢怎么办 换水了龙鱼顶缸怎么办 压着眼睛睡觉醒来模糊怎么办 天热眼睛有眼屎怎么办 眼睛里膜起来了怎么办 眼睛一边大一边小怎么办 眼白膜鼓起来了怎么办 主持问答环节没人提问怎么办 转学原学校不给怎么办 村长借东西不还怎么办 村长不上报建房申请怎么办 村长不上报建房手续申请怎么办 村长不给村民盖章怎么办?