poj1988 Cube Stacking

看错题意,白贡献了4个RE

#include<stdio.h>
#include<string.h>
#include<stdlib.h>
#include<math.h>
__int64 parent[31000];
__int64 total[31000];
__int64 under[31000];
__int64 getparent(__int64 x)
{
    if(parent[x]==x)
    {
        return x;
    }
    __int64 t=getparent(parent[x]);
    under[x]+=under[parent[x]];
    parent[x]=t;
    return parent[x];
}
void Merge(__int64 x,__int64 y)
{
    __int64 m,n;
    m=getparent(x);
    n=getparent(y);
    if(m==n)
    {
        return;
    }
    parent[n]=m;
    under[n]=total[m];
    total[m]+=total[n];
}
int main()
{
    __int64 n;
    scanf("%I64d",&n);
    getchar();
    __int64 i;
    for(i=0;i<31000;i++)
    {
        parent[i]=i;
        total[i]=1;
        under[i]=0;
    }
    for(i=0;i<n;i++)
    {
        __int64 x,y;
        char ch;
        scanf("%c",&ch);
        if(ch=='M')
        {
            scanf("%I64d %I64d",&x,&y);
            Merge(y,x);
        }
        if(ch=='C')
        {
            scanf("%d",&x);
            getparent(x);
            printf("%I64d\n",under[x]);
        }
        getchar();
    }
    return 0;
}

 



posted @ 2012-07-23 10:37  willzhang  阅读(192)  评论(0编辑  收藏  举报