P2342 叠积木
P2342 叠积木
题目背景
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不会已经出现在同一堆积
木里
输出格式:
对每一个统计命令,输出正确回答,用换行符分开每个查询的结果
输入输出样例
6
M 1 6
C 1
M 2 4
M 2 6
C 3
C 4
1
0
2
说明
第一次查询时, 1 下面只有一个 6;第二次
查询时, 3 下面没有任何积木;第三次查询时,
4 下面有两块积木:1 和 6
AC代码+题解:
/*
题解:
正确性解释:以底层元素为并查集的代表元素,保证cnt[]更新到底端的时候不会多加,因为cnt[fa[x]]必为0
fa[x]=y; 表示x的父亲是y; (初始化是自身)
top[x]=t;表示x上面的代表编号是t; (初始化是自身)
cnt[x]=t;表示x以下木块的数量是t; (初始化是0)
find()更新时,两堆合并时,利用回溯,更新top[x]=top[t];cnt[x]=cnt[t]+cnt[x];(画图易知)
ps:每次合并或查询,都要find()一次,要不然会WA。
*/
#include<cstdio>
#include<iostream>
using namespace std;
#define N 30010
int fa[N],cnt[N],top[N];
inline int read(){
register int x=,f=;
register char ch=getchar();
while(ch<''||ch>''){if(ch=='-')f=;ch=getchar();}
while(ch>=''&&ch<=''){x=x*+ch-'';ch=getchar();}
return x*f;
}
inline char in(){
for(register char ch=getchar();;ch=getchar()) if(ch>='A'&&ch<='Z') return ch;
}
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(){
int n,x,y,a,b;char ch;
n=read();
for(int i=;i<=;i++) fa[i]=top[i]=i;
for(int i=;i<=n;i++){
if((ch=in())=='M'){
a=read();b=read();
x=find(a),y=find(b);
fa[x]=y;find(top[y]);
cnt[x]=cnt[top[y]]+;
top[y]=top[x];
}
else{
x=read();find(x);
printf("%d\n",cnt[x]);
}
}
return ;
}
P2342 叠积木的更多相关文章
- 洛谷——P2342 叠积木
P2342 叠积木 题目大意: 给你一堆积木,排成一行,初始时每对积木都只有一个,支持两种操作 第一种是移动操作,格式为“移动X到Y的上面”.X和Y代表两块积木的编号,意思是将X所的那堆积 ...
- 洛谷 P2342 叠积木 题解
本蒟蒻又来发题解了 这题是不是有点像并查集,但是那个询问的个数是不是有点骚: 所以,普通的并查集是无法解决这个问题的,这个时候就需要用到带权并查集了: 每次跑的时候都记录下它的下面有几个点,然后询问的 ...
- [US Open 2004][luogu2342] 叠积木 [带权并查集]
题面 洛谷传送门 思路 害 学了4年多OI,第一次知道还有带权并查集这个东西 wtcl 这个玩意儿的原理和详细实现,可以参考这个博客:带权并查集传送门 这道题,就是在带权并查集的基础上,加个维护每个集 ...
- [luoguP2342] 叠积木(并查集)
传送门 up[i] 表示一个木块上面有多少个 all[i] 表示整个连通块内有多少个 那么 一个木块下面的木块个数为 all[root[i]] - up[i] - 1 注意:up[i] 可以在 fin ...
- 洛谷P2342-叠积木
Problem 洛谷P2342-叠积木 Accept: 373 Submit: 1.1k Time Limit: 1000 mSec Memory Limit : 128MB Problem ...
- 搭积木(block)
[问题描述]小 OY 是一个喜欢搭积木的孩子,他有一天决定向小 C 展示他特别的搭积木技巧.现在一条直线上从左到右有 n 个位置,标号 1..n,第 i 个位置坐标为 x_i.每个位置上都预先叠好了一 ...
- 一步步编写avalon组件01:弹出层组件
avalon2已经稳定下来,是时候教大家如何使用组件这个高级功能了. 组件是我们实现叠积木开发的关键. avalon2实现一个组件非常轻松,并且如何操作这个组件也比以前的avalon2,还是react ...
- 【POJ 1988】 Cube Stacking (带权并查集)
Cube Stacking Description Farmer John and Betsy are playing a game with N (1 <= N <= 30,000)id ...
- 掌握一门语言Go
摘要:Go语言的优势不必多说,通过本篇文章,让我们花时间来掌握一门外语,Let's Go! 关键字:Go语言,闭包,基本语法,函数与方法,指针,slice,defer,channel,goroutin ...
随机推荐
- SQL函数集合
1. PATINDEX ( '%pattern%' , expression ) 返回pattern字符串在表达式expression里第一次出现的位置,起始值从1开始算. pattern字符串在ex ...
- Gulp 学习总结
Gulp 自动化工具开发非常方便,便于上手,值得使用. 一.Gulp安装 gulp是基于NodeJS运行的,所以需要想安装NodeJS. http://nodejs.org/download/ 安装 ...
- input标签写CSS时需要注意的几点(先收藏)
(从已经死了一次又一次终于挂掉的百度空间人工抢救出来的,发表日期2014-05-05) 飞鱼的声纳顶部的搜索框让我头疼了很长时间,原因是总不能获得跨浏览器的统一样式.主要的问题有这么两个:一是inpu ...
- sqlite 对表的操作
查询某个表的创建语法 select sql from sqlite_master where tbl_name="your_table_name" and type='table' ...
- 真正通用的SQL分页存储过程
关于SQL分页的问题,网上找到的一些SQL其实不能真正做到通用,他们主要是以自增长ID做为前提的.但在实际使用中,很多表不是自增长的,而且主键也不止一个字段,其实我们稍做改进就可以达到通用.这里还增加 ...
- CMSIS Example - osMessageQ osMessagePut osMessageGet
#include "cmsis_os.h" void Thread0( void * arg); void Thread1( void * arg); osThreadDef( T ...
- iOS10适配知识点
http://ios.jobbole.com/89551/ http://ios.jobbole.com/88982/ 2.隐私数据访问问题 问题出现 现在app能运行了,当我打开相机时突然又cras ...
- tomcat配置文件server.xml具体解释
元素名 属性 解释 server port 指定一个port,这个port负责监听关闭tomcat 的请求 shutdown 指定向port发送的命令字符串 service name 指定servic ...
- IOS 7 Study - UISegmentedControl
You would like to present a few options to your users from which they can pick anoption, through a U ...
- 为C# Windows服务添加安装程序
最近一直在搞Windows服务,也有了不少经验,感觉权限方面确定比一般程序要受限很多,但方便性也很多.像后台运行不阻塞系统,不用用户登录之类.哈哈,扯远了,今天讲一下那个怎么给Windows服务做个安 ...