zoukankan      html  css  js  c++  java
  • Cube Stacking

    Time Limit: 2000MS   Memory Limit: 30000K
    Total Submissions: 18514   Accepted: 6426
    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


     1 #include"iostream"
     2 #include"cstdio"
     3 #include"cstring"
     4 using namespace std;
     5 const int ms=30001;
     6 int parent[ms];
     7 int sum[ms];
     8 int under[ms];
     9 int find(int x)
    10 {
    11     if(parent[x]==x)
    12         return x;
    13     int t=find(parent[x]);
    14     under[x]+=under[parent[x]];
    15     parent[x]=t;
    16     return parent[x];
    17 }
    18 void merge(int a,int b)
    19 {
    20     int n;
    21     int fa=find(a);
    22     int fb=find(b);
    23     if(fa==fb)
    24         return ;
    25     under[fb]=sum[fa];
    26     parent[fb]=fa;
    27     sum[fa]+=sum[fb];
    28 }
    29 int main()
    30 {
    31     int i,j,p;
    32     for(i=0;i<ms;i++)
    33     {
    34         parent[i]=i;
    35         under[i]=0;
    36         sum[i]=1;
    37     }
    38     cin>>p;
    39     char c;
    40     while(p--)
    41     {
    42         cin>>c;
    43         if(c=='M')
    44         {
    45             cin>>i>>j;
    46             merge(j,i);
    47         }
    48         else
    49         {
    50             cin>>i;
    51             find(i);
    52             cout<<under[i]<<endl;
    53         }
    54     }
    55     return 0;
    56 }
    View Code
  • 相关阅读:
    LODOP在页面不同位置输出页眉页脚
    【gridview增删改查】数据库查询后lodop打印
    LODOP中平铺图片 文本项Repeat
    Lodop设置文本项行间距、字间距
    Lodop打印条码二维码的一些设置
    LODOOP中的各种边距 打印项、整体偏移、可打区域、内部边距
    Lodop设置打印维护返回打印语句代码
    Lodop导出图片,导出单页内容的图片
    Lodop如何设置预览后导出带背景的图,打印不带背景图
    Lodop打印语句最基本结构介绍(什么是一个任务)
  • 原文地址:https://www.cnblogs.com/767355675hutaishi/p/3859066.html
Copyright © 2011-2022 走看看