zoukankan      html  css  js  c++  java
  • Cube Stack

    Cube Stack

     

    有一点lazy思想,设三个数组cnt代表它以下的有多少个元素(直到栈底),top[x]代表x所在栈的栈顶元素,dad[x]代表x所在栈的栈底元素,先寻找父亲,然后递归更新累加cnt,找父亲的时候更新cnt,对于一个元素,再用之前一定要找父亲,这样才会是真的cnt

    #include<iostream>
    #include<cstdio>
    using namespace std;
    
    int top[30010],cnt[30010],dad[30010];
    
    int p; 
    
    void Cin(int &x)
    {
        char c=getchar();x=0;
        while(c<'0'||c>'9')c=getchar();
        while(c<='9'&&c>='0')x=x*10+c-'0',c=getchar();
    }
    
    void Cout(int x)
    {
        if(x>9) Cout(x/10);
        putchar(x%10+'0');
    }
    
    int getfather(int x)
    {
        if(dad[x]==x)
        return x;
        int f=dad[x];
        dad[x]=getfather(dad[x]);
        cnt[x]+=cnt[f];
        return dad[x];
    }
    
    void merge(int x,int y)
    {
        int F=getfather(x);
        int f=getfather(y);
        if(F!=f)
        {
        dad[F]=f;
        int t=getfather(top[f]);
        cnt[F]=cnt[top[f]]+1;
        top[f]=top[F];
        }
    }
    
    int main()
    {
        for(int i=1;i<=30010;i++)
        {
            dad[i]=i;
            top[i]=i;
        }
        cin>>p;
        char c;
        int x,y;
        for(int i=1;i<=p;i++)
        {
            cin>>c;
            if(c=='M')
            {
                Cin(x),Cin(y);
              merge(x,y);    
            }
            else
            {
                cin>>x;
                int t=getfather(x);
                Cout(cnt[x]),putchar('
    ');
            }
        }
        return 0;
    }
  • 相关阅读:
    transition的属性变化
    transition过渡动画
    增删改查的45道题
    4月18 数据库的CRUD操作
    php 中输入输出提交
    4月12 php练习
    3月29 表单以及正则表达式
    3月27 隐藏导航
    3月26 document的练习
    3月25 JavaScript 练习题
  • 原文地址:https://www.cnblogs.com/war1111/p/7349519.html
Copyright © 2011-2022 走看看