题目背景

\(Cube Stacking, 2004 Open\)

题目描述

约翰和贝西在叠积木。共有\(30000\)块积木,编号为\(1\)到\(30000\)。一开始,这些积木放在地上,自然地分成\(N\)堆。贝西接受约翰的指示,把一些积木叠在另一些积木的上面。一旦两块积木相叠, 彼此就再也不会分开了,所以最后叠在一起的积木会越来越高。约翰让贝西依次执行\(P\)条操作,操作分为两种:

 第一种是移动操作,格式为“移动\(X\)到\(Y\)的上面”。\(X\)和\(Y\)代表两块积木的编号,意思是将X所的那堆积木,整体叠放到\(Y\)所在的那堆积木之上;

 第二种是统计操作,格式为“统计\(Z\)下方的积木数量”。\(Z\)代表一块积木的编号,意思是贝西需要报告在编号为\(Z\)的积木之下还有多少块积木

请编写一个程序,帮助贝西回答每条统计问题。

输入输出格式

输入格式:

 第一行:单个整数:\(P,1 ≤ P ≤ 10^5\)

 第二行到第\(P + 1\)行:每行描述一条命令,如果这行开头的字母是 \(M\),代表一条移动命令,后面的两个整数代表上文中的X和\(Y\);如果开头字母是 \(C\),代表一条统计命令。后面的整数代表上文中的\(Z\),保证所有的移动命令都有意义,\(X\)和\(Y\)不会已经出现在同一堆积木里

输出格式:

 对每一个统计命令,输出正确回答,用换行符分开每个查询的结果

输入输出样例

输入样例#1:

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

输出样例#1:

1
0
2

说明

第一次查询时, \(1\) 下面只有一个 \(6\);第二次查询时, \(3\) 下面没有任何积木;第三次查询时,\(4\) 下面有两块积木:\(1\) 和 \(6\)

思路:并查集的题目就是不一样,代码短小精悍,思路却很难想……对于这道题目来说,我们用一个\(s\)数组表示某个积木上方有多少个积木,再用一个数组\(a\)表示以某个点为顶的积木的个数,在并查集路径压缩的过程中让\(s[x]+=s[fa[x]]\),就是说\(x\)的父亲是在\(x\)上面的,那么就把它父亲上面的积木也加到\(x\)上面来,然后对于每个移动命令,是把以\(x\)为顶的那一块放到\(y\)上面,那么我们就更新\(x\)是\(y\)的父亲,然后以\(x\)为顶的积木个数变成了原本以\(x\)为顶的积木个数加上原本以\(y\)为顶的积木个数,\(y\)上方的积木个数就加上了原本以\(x\)为顶的积木个数,然后对于每个统计命令,因为要求对于\(x\)输出\(x\)下面的积木的个数,那么就是以\(x\)为顶的积木个数减去\(x\)上面的积木个数再减\(1\)(因为\(x\)不在\(x\)的下方)。

代码:

#include<cstdio>
#include<iostream>
#include<cstring>
#define maxn 30007
using namespace std;
int p,fa[maxn],s[maxn],a[maxn];
string s1;
inline int qread() {char c=getchar();int num=0,f=1;for(;!isdigit(c);c=getchar()) if(c=='-') f=-1;for(;isdigit(c);c=getchar()) num=num*10+c-'0';return num*f;
}
int find(int x) {if(fa[x]==x) return x;int res=find(fa[x]);s[x]+=s[fa[x]];return fa[x]=res;
}
int main() {p=qread();for(int i=1;i<=30000;++i) a[i]=1,fa[i]=i;for(int i=1,x,y;i<=p;++i) {cin>>s1;if(s1=="M") {x=qread(),y=qread();int zrj=find(x),cyh=find(y);if(zrj!=cyh) {fa[cyh]=zrj;s[cyh]+=a[zrj];a[zrj]+=a[cyh];a[cyh]=0;}}else {x=qread();int zrj=find(x);printf("%d\n",a[zrj]-s[x]-1);}}return 0;
}

转载于:https://www.cnblogs.com/grcyh/p/10153942.html

洛谷P2342 叠积木相关推荐

  1. 【洛谷 1969】积木大赛

    题目描述 春春幼儿园举办了一年一度的"积木大赛".今年比赛的内容是搭建一座宽度为nn的大厦,大厦可以看成由n块宽度为1的积木组成,第i块积木的最终高度需要是h_ih i ​     ...

  2. 洛谷P2342-叠积木

    Problem 洛谷P2342-叠积木 Accept: 373   Submit: 1.1k Time Limit: 1000 mSec    Memory Limit : 128MB Problem ...

  3. 01背包的应用~洛谷P1504 积木城堡

    题目描述 XC 的儿子小 XC 最喜欢玩的游戏用积木垒漂亮的城堡.城堡是用一些立方体的积木垒成的,城堡的每一层是一块积木. 小 XC 是一个比他爸爸 XC 还聪明的孩子,他发现垒城堡的时候,如果下面的 ...

  4. 洛谷 P1504 积木城堡

    洛谷 P1504 积木城堡 题目 题目描述 XC的儿子小XC最喜欢玩的游戏用积木垒漂亮的城堡.城堡是用一些立方体的积木垒成的,城堡的每一层是一块积木.小XC是一个比他爸爸XC还聪明的孩子,他发现垒城堡 ...

  5. 洛谷P3688/uoj#291. [ZJOI2017]树状数组

    传送门(uoj) 传送门(洛谷) 这里是题解以及我的卡常数历程 话说后面那几组数据莫不是lxl出的这么毒 首先不难发现这个东西把查询前缀和变成了查询后缀和,结果就是查了\([l-1,r-1]\)的区间 ...

  6. 洛谷-DFS-1019-单词接龙-个人AC题解和公共AC题解笔记

    学习内容: 预处理 万能头文件 string的使用 话不多说,直奔主题 本人AC代码 #include<iostream> #include<cstdio> #include& ...

  7. 洛谷 深基 第4部分 基础数学与数论(19-21课)

    洛谷 深基 第4部分 基础数学与数论  第19章 位运算与进制转换 P1143 进制转换 https://www.luogu.com.cn/problem/P1143 洛谷P1143 进制转换的Pyt ...

  8. 洛谷P1244青蛙过河

    洛谷P1244青蛙过河 题目描述 有一条河,左边一个石墩(A 区)上有编号为 1,2,-,n 的 n 只青蛙,河中有 k 个荷叶(C 区),还有 h 个石墩(D 区),右边有一个石墩(B 区),n 只 ...

  9. 洛谷--橙色百道DP总结

    最近刷完了洛谷橙色DP大约一百道,算是发现了一些套路,就部分题目做一些总结. 大概分为三类 第一类,九大背包及其衍生 第二类,经典DP模型,如LCS,LIS等 第三类,实际问题背景的普通,环形,树上D ...

  10. 【洛谷】P2676 [USACO07DEC]Bookshelf B (c++)

    题目描述 Farmer John最近为奶牛们的图书馆添置了一个巨大的书架,尽管它是如此的大,但它还是几乎瞬间就被各种各样的书塞满了.现在,只有书架的顶上还留有一点空间. 所有 N(1≤N≤20,000 ...

最新文章

  1. Linux中的configure、pkg-config、pkg_config_path和安装中的PKG_CONFIG_PATH问题 pkgconfig
  2. “互联网+医疗健康” 行业调研报告
  3. Spring Boot 启动载入数据 CommandLineRunner
  4. 性能高1倍,价格低3/4!数据库实时同步新选择!
  5. centos系统云服务器,Centos系统怎么进云服务器
  6. Git 的BUG小结
  7. 微信小程序云开发教程-微信小程序的API入门-常用API
  8. SBUS调试助手 sbus解析,sbus协议
  9. 双线性函数matlab,双线性插值(Matlab实现)
  10. Elasticsearch 7.X 拼音分词器 pinyin 使用
  11. 2022年各行业白皮书市场研报合集(共125份)
  12. word英文大写问题解决方案
  13. xp自定义桌面中ie图标消失解决办法
  14. h5制作 php 开源,PHP源码:2019最新仿易企秀V15.1完整版开源版源码,修复采集功能、新增同行站模板采集等...
  15. 【爬虫小白】各种请求使用代理的方法
  16. 电子元器件分销业ERP系统供应链解决方案
  17. 莫名其妙的“配置系统未能初始化”异常
  18. 民族列表JSON(可直接复制)
  19. 这是我看过的最好的Python零基础Pandas教程
  20. 提到区块链,这一次微软没有再落后

热门文章

  1. php生成器处理数据问题,《PHP经典实例》笔记数组篇 - 4.24 使用生成器高效迭代处理大型数据集...
  2. 2022年熔化焊接与热切割题库
  3. vlookup使用步骤_vlookup函数的使用方法
  4. python sort函数原理_python sort函数原理
  5. 一意孤行亚马逊----一个钓鱼疯子的巴西亚马逊之行( 3.九月19日 玛瑙斯城印象) 作者:咸水鱼...
  6. 最佳学习方法(10)学习方法介绍
  7. Cypress 简介
  8. pythonforandroid下载中文_SL4A、PythonForAndroid和Android 7.0 Noug
  9. 生信笔记:序列同源性、相似性
  10. ArcGIS 10.6 安装教程