zoukankan      html  css  js  c++  java
  • POJ1988 Cube Stacking

    Cube Stacking
    Time Limit: 2000MS   Memory Limit: 30000K
    Total Submissions: 24665   Accepted: 8653
    Case Time Limit: 1000MS

    Description

    Farmer John and Betsy are playing a game with N (1 <= N <= 30,000)identical cubes labeled 1 through N. They start with N stacks, each containing a single cube. Farmer John asks Betsy to perform P (1<= P <= 100,000) operation. There are two types of operations: 
    moves and counts. 
    * In a move operation, Farmer John asks Bessie to move the stack containing cube X on top of the stack containing cube Y. 
    * In a count operation, Farmer John asks Bessie to count the number of cubes on the stack with cube X that are under the cube X and report that value. 

    Write a program that can verify the results of the game. 

    Input

    * Line 1: A single integer, P 

    * Lines 2..P+1: Each of these lines describes a legal operation. Line 2 describes the first operation, etc. Each line begins with a 'M' for a move operation or a 'C' for a count operation. For move operations, the line also contains two integers: X and Y.For count operations, the line also contains a single integer: X. 

    Note that the value for N does not appear in the input file. No move operation will request a move a stack onto itself. 

    Output

    Print the output from each of the count operations in the same order as the input file. 

    Sample Input

    6
    M 1 6
    C 1
    M 2 4
    M 2 6
    C 3
    C 4
    

    Sample Output

    1
    0
    2
    

    Source

    //同P2342 叠积木
    #include<cstdio>
    using namespace std;
    const int N=3e5+5;
    int n,fa[N],top[N],cnt[N];
    int find(int x){
        if(fa[x]==x) return x;
        int t=fa[x];
        fa[x]=find(fa[x]);
        fa[x]=fa[t];
        top[x]=top[t];
        cnt[x]=cnt[t]+cnt[x];
        return fa[x];
    }
    int main(){
        scanf("%d",&n);char s[10];
        for(int i=1;i<=30000;i++) fa[i]=top[i]=i;
        for(int i=1,a,b,x,y;i<=n;i++){
            scanf("%s",s);
            if(s[0]=='M'){
                scanf("%d%d",&a,&b);
                x=find(a);y=find(b);
                fa[x]=y;find(top[y]);
                cnt[x]=cnt[top[y]]+1;
                top[y]=top[x];
            }
            else{
                scanf("%d",&x);find(x);
                printf("%d
    ",cnt[x]);
            }
        }
        return 0;
    }
  • 相关阅读:
    noi 2011 noi嘉年华 动态规划
    最小乘积生成树
    noi 2009 二叉查找树 动态规划
    noi 2010 超级钢琴 划分树
    noi 2011 阿狸的打字机 AC自动机
    noi 2009 变换序列 贪心
    poj 3659 Cell Phone Network 动态规划
    noi 2010 航空管制 贪心
    IDEA14下配置SVN
    在SpringMVC框架下建立Web项目时web.xml到底该写些什么呢?
  • 原文地址:https://www.cnblogs.com/shenben/p/6478001.html
Copyright © 2011-2022 走看看