叠积木

题目描述:
约翰和贝西在叠积木。共有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
思路
数组top[x]表示x所属的栈顶元素。
数组cnt[x]表示x到栈底的元素个数。
数组father[x]表示x的栈底元素。

#include<iostream>
using namespace std;
const int maxn=30010;
int n,father[maxn],cnt[maxn],top[maxn];
char c;
int find(int x)
{if(father[x]==x)return x;int fa=father[x];father[x]=find(fa);cnt[x]+=cnt[fa];top[x]=top[fa];return father[x];
}
void unionn(int f1,int f2)
{father[f1]=f2;find(top[f2]);cnt[f1]=cnt[top[f2]]+1;top[f2]=top[f1];
}
int main()
{int x,y;cin>>n;for(int i=1;i<=maxn;i++)father[i]=top[i]=i;for(int i=1;i<=n;i++){cin>>c;if(c=='M'){cin>>x>>y;int f1=find(x);int f2=find(y);if(f1!=f2)unionn(f1,f2);}else{cin>>x;find(x);cout<<cnt[x]<<endl;}}return 0;
}

叠积木(加权并查集)相关推荐

  1. Rochambeau POJ - 2912 (枚举和加权并查集+路径压缩)找唯一裁判

    题意:有n个人玩石头剪刀布,有且只有一个裁判.除了裁判每个人的出拳形式都是一样的. a<b表示b打败a,a=b表示a和b出拳一样,平手.a>b表示a打败b. 给出m个回合的游戏结果,问能否 ...

  2. hdu 3635 Dragon Balls(加权并查集)2010 ACM-ICPC Multi-University Training Contest(19)

    这道题说,在很久很久以前,有一个故事.故事的名字叫龙珠.后来,龙珠不知道出了什么问题,从7个变成了n个. 在悟空所在的国家里有n个城市,每个城市有1个龙珠,第i个城市有第i个龙珠. 然后,每经过一段时 ...

  3. A Bug‘s Life POJ 2492 加权并查集

    A Bug's Life POJ 2492 加权并查集 传送门:http://poj.org/problem?id=2492 Description Background Professor Hopp ...

  4. bzoj 4886: [Lydsy2017年5月月赛]叠塔游戏 并查集

    题意 小Q正在玩一个叠塔的游戏,游戏的目标是叠出尽可能高的塔.在游戏中,一共有n张矩形卡片,其中第i张卡片的长度为a_i,宽度为b_i.小Q需要把所有卡片按一定顺序叠成一座塔,要求对于任意一个矩形,它 ...

  5. 【加权并查集】bzoj 4602 齿轮

    立志用最少的代码做最高效的表达 Description 现有一个传动系统,包含了N个组合齿轮和M个链条.每一个链条连接了两个组合齿轮u和v,并提供了一个传动比x : y.即如果只考虑这两个组合齿轮,编 ...

  6. Zjnu Stadium HDU - 304 加权并查集

    题意: 观众席围成一圈.列的总数是300,编号为1–300,顺时针计数,我们假设行的数量是无限的.将有N个人去那里.他对这些座位提出了要求:这意味着编号A的顺时针X距离坐着编号B.例如:A在第4列,X ...

  7. bzoj 3362: [Usaco2004 Feb]Navigation Nightmare 导航噩梦(加权并查集)

    3362: [Usaco2004 Feb]Navigation Nightmare 导航噩梦 Time Limit: 10 Sec  Memory Limit: 128 MB Submit: 121  ...

  8. 【并查集】noi2001食物链

    P2024 [NOI2001]食物链 //这是一道比我年纪大的题啊啊啊啊啊QAQ 加权并查集  三倍并查集好厉害qwq 图源洛谷题解 贴代码qwq 1 #include<cstdio> 2 ...

  9. 【高级数据结构其一·并查集】

    用于快速处理不相交集合的查询和合并问题 经典应用:连通子图,最小生成树Kruskal,最近公共祖先 #初始化 n=int(input()) s=[i for i in range(n+1)]#查询 d ...

  10. 并查集(加权规则、折叠规则)

    1.基本知识概念 等价类与并查集.如果用符号"="表示集合上的等价关系,那么对于该集合中的任意对象x,y,z,下列性质成立 : 自反性:x=x(即等于自身) 对称性:若x=y,则y ...

最新文章

  1. 需要恢复中断状态的一个场景
  2. java 批量验证_正则表达式批量验证函数
  3. 外卖匹配系统_歧视外卖员的北京SKP是个什么东西?
  4. 我是如何查找RFC官方资料的
  5. sql server 锁定_如何使用SQL Server 2014托管锁定优先级控制在线索引重建锁定
  6. SQL Server where和having区别
  7. shopnc数据库 批量修改商品价格
  8. MySQL 复习笔记
  9. AutoJs学习-自动添加微信群好友
  10. ad中按钮开关的符号_收藏:电路图形符号大全!!!
  11. 鼠标失灵,但鼠标和USB接口都是好的的情况。
  12. 无线移动通信技术快速发展历程和趋向(转)
  13. BZOJ2818 Gcd
  14. html跳转到关注的微信公众号,手机浏览器一键跳转微信公众号关注的方法
  15. 如何开发一款电商app小程序
  16. ffmpeg源码简析(十)libswscale中的SwsContext,sws_scale()
  17. Kafka配置动态SASL_SCRAM认证
  18. ppc64le处理器国产power8服务器CentOS7.2安装open-jdk
  19. 机械键盘连击问题的软件解决方案
  20. 逛InfoComm China 2019 必打卡展位之“亿联网络”

热门文章

  1. Linux(七)DNS域名解析服务器学习
  2. Linux系统入门学习
  3. yum执行出错,There are no enabled repos
  4. 计算机组成原理——指令系统
  5. HTML 常用选择框
  6. 冥王星P的编曲日志《我们就这样溺死在漩涡里》
  7. 《紫川》之远东战火 十一卷
  8. 泰坦尼克号数据_数据分析实战3:泰坦尼克号生存分析
  9. Excel中的数字转文本和文本转数字
  10. 计算机桌面图标有哪两类,电脑桌面图标箭头,电脑桌面图标有两个箭头