zoukankan      html  css  js  c++  java
  • poj1988Cute Stacking

    题目大意:有几个stack,初始里面有一个cube。支持两种操作:1.move x y: 将x所在的stack移动到y所在stack的顶部。2.count x:数在x所在stack中,在x之下的cube的个数。

    #include<iostream>
    #include<cstdio>
    #include<cstring>
    #include<cstdlib>
    #define maxn 300001
    
    using namespace std;
    int n,x,y;char c;
    int cnt[maxn],sum[maxn],fa[maxn];
    
    int find(int x)
    {
        if(fa[x]==x) return fa[x];
        int f=fa[x];
        fa[x]=find(fa[x]);
        cnt[x]+=cnt[f];//cnt[i]表示i上面有几个。
        return fa[x];
    }
    
    void merge(int b,int a)
    {
        fa[a]=b;//将a接到b上 
        cnt[a]=sum[b];//a的位置就是b里面的个数。
        sum[b]+=sum[a];//更新b的总数 
        sum[a]=0;//更新a的总数。 
    }
    
    int main()
    {
        scanf("%d",&n);
        for(int i=1;i<=n;i++)
        {
            fa[i]=i;
            sum[i]=1;
        }
        for(int i=1;i<=n;i++)
        {
            cin>>c;
            if(c=='M')
            {
                scanf("%d%d",&x,&y);
                int l1=find(x);
                int l2=find(y);
                merge(l1,l2);
            }
            else
            {
                scanf("%d",&x);
                int k=find(x);
                cout<<sum[k]-cnt[x]-1<<endl;//sum表示总数 
            }
        }
        return 0;
    }
    心若向阳,无谓悲伤
    折花枝,恨花枝,准拟花开人共卮,开时人去时。 怕相思,已相思,轮到相思没处辞,眉间露一丝。
  • 相关阅读:
    冲刺1
    第九周
    课堂作业
    团队项目典型用户与用户场景分析
    第八周
    梦断代码阅读笔记03
    tab页的使用方法
    校园服务nabcd需求分析
    第七周
    mysql下载以及安装
  • 原文地址:https://www.cnblogs.com/L-Memory/p/6293769.html
Copyright © 2011-2022 走看看