HDU 1988 Cube Stacking (数据结构-并检查集合)

HDU 1988 Cube Stacking (数据结构-并检查集合)

大家好,又见面了,我是全栈君,今天给大家准备了Idea注册码。

Cube Stacking
Time Limit: 2000MS   Memory Limit: 30000K
Total Submissions: 18834   Accepted: 6535
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



题目大意:

有N个立方体和N个格子,1~N编号,一開始i立方体在i号格子上,每一个格子刚好1个立方体。如今m组操作,M a b表示将a号立方体所在的格子的所有立方体放在b号立方体所在的格子的所有立方体上面。C x表示询问x号立方体以下的立方体的个数。

解题思路:

在并查集的基础上。仅仅须要知道x到父亲的距离以及父亲究竟的距离就知道x究竟的距离。

解题代码:

#include <iostream>
#include <cstdio>
using namespace std;

const int maxn=31000;
int father[maxn],cnt[maxn],dis[maxn];

int find(int x){
    if(father[x]!=x){
        int tmp=father[x];
        father[x]=find(father[x]);
        dis[x]+=dis[tmp];
    }
    return father[x];
}

void combine(int x,int y){
    father[x]=y;
    dis[x]+=cnt[y];
    cnt[y]+=cnt[x];
}

int main(){
    int m;
    scanf("%d",&m);
    for(int i=0;i<maxn;i++){
        father[i]=i;
        cnt[i]=1;
        dis[i]=0;
    }
    while(m-- >0){
        char ch;
        cin>>ch;
        if(ch=='M'){
            int a,b;
            scanf("%d%d",&a,&b);
            if(find(a)!=find(b)) combine(find(a),find(b));
        }else{
            int x;
            scanf("%d",&x);
            find(x);
            printf("%d\n",dis[x]);
        }
    }
    return 0;
}

版权声明:本文博客原创文章。博客,未经同意,不得转载。

版权声明:本文内容由互联网用户自发贡献,该文观点仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请联系我们举报,一经查实,本站将立刻删除。

发布者:全栈程序员-站长,转载请注明出处:https://javaforall.net/117330.html原文链接:https://javaforall.net

(0)
全栈程序员-站长的头像全栈程序员-站长


相关推荐

  • Feign原理 (图解)_feign原理

    Feign原理 (图解)_feign原理1.1简介:Feign远程调用的Feign远程调用,核心就是通过一系列的封装和处理,将以JAVA注解的方式定义的远程调用API接口,最终转换成HTTP的请求形式,然后将HTTP的请求的响应结果,解码成JAVABean,放回给调用者。Feign远程调用的基本流程,大致如下图所示。从上图可以看到,Feign通过处理注解,将请求模板化,当实际调用的时候,传入参数,根据参数再应用到请求上,进而转化成真正的Request请求。通过Feign以及JAVA的动态代理机制,使得Java…

    2022年10月5日
    3
  • BaseAdapter导致notifyDataSetChanged()无效的四个原因及处理方法

    BaseAdapter导致notifyDataSetChanged()无效的四个原因及处理方法前一段时间在做一个项目的时候遇到了一个关于BaseAdapter的notifyDataSetChanged()方法无效问题,当时在网上搜了一个解决方法,今天又遇到了一个类似的问题,我在这里做个记录,防止以后再次发生,或者其他朋友再次遇到。一、ScrollView中嵌套ListView或GridView原因:两个的滚动监听冲突解决方法:重写ListView或GridViewpackagecom.m

    2022年6月18日
    25
  • clion 激活_最新在线免费激活

    (clion 激活)好多小伙伴总是说激活码老是失效,太麻烦,关注/收藏全栈君太难教程,2021永久激活的方法等着你。IntelliJ2021最新激活注册码,破解教程可免费永久激活,亲测有效,下面是详细链接哦~https://javaforall.net/100143.html0BXA05X8YC-eyJsaWNlbnNlSWQi…

    2022年3月30日
    42
  • docker镜像操作_docker 本地镜像

    docker镜像操作_docker 本地镜像前言Docker的三大核心概念:镜像、容器、仓库。初学者对镜像和容器往往分不清楚,学过面向对象的应该知道类和实例,这跟面向对象里面的概念很相似我们可以把镜像看作类,把容器看作类实例化后的对象。|

    2022年7月29日
    7
  • 云计算与边缘计算协同 九大应用场景

    云计算与边缘计算协同 九大应用场景来源:物联网报告中心前言2019年边缘计算备受产业关注,一度引起了资本市场的投资热潮,很多人把2019年称作边缘计算的元年。理性来看,造成如此火爆局势难免有…

    2022年6月22日
    41
  • 初识python廖雪峰_Python3-廖雪峰学习笔记「建议收藏」

    初识python廖雪峰_Python3-廖雪峰学习笔记「建议收藏」Key-value存储方式,在放进去的时候,必须根据key算出value的存放位置,这样,取的时候才能根据key直接拿到valuedict是用空间来换取时间的一种方法,用在需要高速查找的地方。dict的key必须是不可变对象通过key计算位置的算法称为哈希算法,要保证hash的正确性,作为key的对象就不能变的对象a的内容是’abc’,是指,a本身是一个变量,它指向的对象的内容才是abc’对于不变…

    2025年7月7日
    4

发表回复

您的邮箱地址不会被公开。 必填项已用 * 标注

关注全栈程序员社区公众号