首页 > 编程语言 > 详细

C++-POJ1988-Cube Stacking[数据结构][并查集]

时间:2020-02-14 23:46:52      阅读:98      评论:0      收藏:0      [点我收藏+]
int find(int x){return fa[x]==x?x:fa[x]=find(fa[x]);}

 

#include <set>
#include <map>
#include <cmath>
#include <queue>
#include <vector>
#include <cstdio>
#include <cstdlib>
#include <cstring>
#include <iostream>
#include <algorithm>
using namespace std;
const int MAXN=30001;
int n,fa[MAXN],dis[MAXN],height[MAXN];char s[5];
int find(int x){
    int fx=fa[x]; 
    if(fa[x]!=x){
        fa[x]=find(fa[x]);//路径压缩 
        dis[x]+=dis[fx];//该行只会在合并时遍历一次 
    }
    return fa[x];
}

void Union(int x,int y){
    int fx=find(x),fy=find(y);
    fa[fy]=fx;
    dis[fy]=height[fx];
    height[fx]+=height[fy]; 
}

int main(){
    scanf("%d",&n);
    for(int i=0;i<MAXN;i++)fa[i]=i,height[i]=1;
    for(int x,y;n--;){
        scanf("%s",s);
        if(s[0]==M)scanf("%d%d",&x,&y),Union(x,y);
        else scanf("%d",&x),printf("%d\n",height[find(x)]-dis[x]-1);
    }
    return 0;
}

 

C++-POJ1988-Cube Stacking[数据结构][并查集]

原文:https://www.cnblogs.com/JasonCow/p/12310224.html

(0)
(0)
   
举报
评论 一句话评论(0
关于我们 - 联系我们 - 留言反馈 - 联系我们:wmxa8@hotmail.com
© 2014 bubuko.com 版权所有
打开技术之扣,分享程序人生!