【HDU】2818-Building Block(并查集)

来源:互联网 发布:软件开发过程不包括 编辑:程序博客网 时间:2024/06/14 04:34

坑死了,这道题QAQ。。。说好的没有0,但是后台数据有0,WA了一下午= =

利用num[i]代表i下面有几个格子,Size[i]代表i做底的时候这一堆有几个箱子

#include<cstdio>#include<algorithm>using namespace std;const int maxn = 30005;int n,fa[maxn];int num[maxn],Size[maxn];char op[5];int find_father(int u){    if(fa[u] == u)        return fa[u];    else{        int temp = fa[u];        fa[u] = find_father(fa[u]);        num[u] += num[temp];        return fa[u];    }}int main(){    while(scanf("%d",&n) != EOF){        for(int i = 0; i <= 30000; i++){            fa[i]   = i;            Size[i] = 1;            num[i]  = 0;        }        int x,y;        for(int i = 1; i <= n; i++){            scanf("%s",op);            if(op[0] == 'M'){                scanf("%d%d",&x,&y);                int fx = find_father(x),fy = find_father(y);                if(fx!= fy){                    fa[fx] = fy;                    num[fx]  = Size[fy];                    Size[fy]+= Size[fx];                    Size[fx] = 0;                }            }            else{                scanf("%d",&x);                find_father(x);                printf("%d\n",num[x]);            }        }    }    return 0;}

0 0
原创粉丝点击