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

POJ 1988 Cube Stacking 并查集

时间:2014-10-09 14:21:14      阅读:132      评论:0      收藏:0      [点我收藏+]

标签:style   blog   http   color   io   os   ar   for   sp   

题目链接:http://poj.org/problem?id=1988

思路:并查集的扩展~, 感觉并查集里面很多都有用到当前点到祖先的距离。。 。。  这个题目要这么做,记录每个集合的元素个数,然后记录当前元素是第几个被插入到集合中的,其中涉及到了路径压缩。。最后的结果就是总的个数减去第几个被插入到集合。

 

#include <iostream>
#include <cstdio>
using namespace std;

int n;
int f[30020];
int sum[30020];
int num[30020];

int getf(int a)
{
    if(f[a] == a)
    {
        return a;
    }
    int t = f[a];
    
    f[a] = getf(f[a]);
    
    num[a] += num[t];
    
    return f[a];
}

void merge(int a, int b)
{
    int x = getf(a);
    int y = getf(b);
    
    if(x != y)
    {
        f[y] = x;
        num[y] += sum[x];
        sum[x] += sum[y];
    }
}

void init()
{
    for(int i=1; i<=30010; i++)
    {
        f[i] = i;
        num[i] = 0;
        sum[i] = 1;
    }
}

int main()
{
    char s[2];
    int a,b; 
    while(cin>>n)
    {
        init(); 
        for(int i=1; i<=n; i++)
        {
            scanf("%s",s);
            if(s[0] == M)
            {
                scanf("%d %d",&a, &b);
                merge(a,b);
            }
            else if(s[0] == C)
            {
                scanf("%d",&a);
                printf("%d\n", sum[getf(a)]-num[a]-1);
            }
        }
    }
    return 0;
}

 

POJ 1988 Cube Stacking 并查集

标签:style   blog   http   color   io   os   ar   for   sp   

原文地址:http://www.cnblogs.com/ltwy/p/4013082.html

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