并查集入门学习

来源:互联网 发布:asp.net入门编程实例 编辑:程序博客网 时间:2024/05/17 21:47

学习过程

第一次接触并查集是Codeforces上的一道题目,当时还不知道并查集是啥玩意...后来简单的学习了一下基本操作,然而并没有怎么练题...于是最近碰到并查集相关题目时一脸茫然,又重新认真(雾)学习了一遍!然后套着模板刷了几道简单的题,但是没想到并查集的题目还可以分为好几类...算是长见识了。

  • 简单并查集
  • 带权值并查集
  • 种类并查集
  • 联通无环图(雾)
大佬们已经把并查集相关知识讲解的非常到位了,浅显易懂,我这就算简单归纳一下。

学习资料

并查集入门文章:并查集详解 (转)【非常到位】
并查集深层应用:POJ-1182 食物链【一题带你领悟】

题目练习

Stat#OriginTitle
98 / 224APOJ 2236Wireless Network
85 / 138BPOJ 1611The Suspects
92 / 142CHDU 1213How Many Tables
49 / 173DHDU 3038How Many Answers Are Wrong
55 / 180EPOJ 1182食物链





33 / 74JPOJ 2492A Bug's Life





51 / 180MHDU 1272小希的迷宫
38 / 117NPOJ 1308Is It A Tree?补充:
HDU 1232 畅通工程
HDU 3047 Zjnu Stadium

常见写法【模板】

查找--find函数

int find(int x)  {      return x == pre[x] ? x : find(pre[x]);  } 

int find(int x) {    int r = x;    while (r != pre[r])        r = pre[r];    int i = x, j;    while (pre[i] != r) //路径压缩    {        j = pre[i];        pre[i] = r;        i = j;    }    return r;}

int find(int x){    if(F[x] == -1)        return x;    return F[x] = find(F[x]);}


合并--join函数

void join(int x, int y){    int fx = Find(x), fy = Find(y);    if (fx != fy)        pre[fx] = fy;}

  • The end.
  • 2017年8月6日16:13:04

原创粉丝点击