码迷,mamicode.com
首页 > 其他好文 > 详细

POJ 1611 并查集

时间:2015-06-15 21:51:55      阅读:99      评论:0      收藏:0      [点我收藏+]

标签:

23333......简单的并查集模板。就是被并查集递归式路径压缩RE坑过。。。学习一下非递归式路径压缩。

附代码:

#include<stdio.h>
#include<iostream>
#include<string.h>
#define maxn 30100
using namespace std;

int fa[maxn];
int n, m, k;

void init()
{
    for (int i=0; i<=n; ++i)
        fa[i] = i;
}

//int find1(int v)  // 递归式路径压缩查找
//{
//    if (fa[v] == v) return v;
//    return fa[v] = find1(fa[v]);
//}

int find1(int v)
{
    int k, j, r;
    r = v;
    while (r != fa[r])
        r = fa[r];
    k = v;
    while(k != r)
    {
        j = fa[k];
        fa[k] = r;
        k = j;
    }
    return r;
}

void unin(int u, int v)
{
    int fau = find1(u);
    int fav = find1(v);
    if (fau != fav)
        fa[fau] = fav;
}

int main()
{
    while (~scanf("%d%d", &n, &m))
    {
        if (n ==0 && m == 0)
            break;
        init();
        while(m--)
        {
            scanf("%d", &k);
            int t, tt;
            if (k != 0)
                scanf("%d", &t);
            for (int i=1; i<k; ++i)
            {
                scanf("%d", &tt);
                unin(t, tt);
            }
        }
        int num = 0;
        for (int i=0; i<n; ++i)
        {
            if (find1(i) == find1(0))
                num++;
        }
        printf("%d\n", num);
    }
    return 0;
}

POJ 1611 并查集

标签:

原文地址:http://www.cnblogs.com/icode-girl/p/4579168.html

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!