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;
    }
  • 相关阅读:
    httpclient妙用一 httpclient作为客户端调用soap webservice(转)
    WebService学习总结(转)
    C++的override和final
    C++类const和static成员初始化
    C++数据存储方式
    C++类成员存储大小
    内联函数
    C++接口的概念
    C++深拷贝和浅拷贝
    C++构造函数以及何时被调用
  • 原文地址:https://www.cnblogs.com/war1111/p/7349519.html
Copyright © 2011-2022 走看看