叠积木(加权并查集)
叠积木
题目描述:
约翰和贝西在叠积木。共有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;
}
叠积木(加权并查集)相关推荐
- Rochambeau POJ - 2912 (枚举和加权并查集+路径压缩)找唯一裁判
题意:有n个人玩石头剪刀布,有且只有一个裁判.除了裁判每个人的出拳形式都是一样的. a<b表示b打败a,a=b表示a和b出拳一样,平手.a>b表示a打败b. 给出m个回合的游戏结果,问能否 ...
- hdu 3635 Dragon Balls(加权并查集)2010 ACM-ICPC Multi-University Training Contest(19)
这道题说,在很久很久以前,有一个故事.故事的名字叫龙珠.后来,龙珠不知道出了什么问题,从7个变成了n个. 在悟空所在的国家里有n个城市,每个城市有1个龙珠,第i个城市有第i个龙珠. 然后,每经过一段时 ...
- A Bug‘s Life POJ 2492 加权并查集
A Bug's Life POJ 2492 加权并查集 传送门:http://poj.org/problem?id=2492 Description Background Professor Hopp ...
- bzoj 4886: [Lydsy2017年5月月赛]叠塔游戏 并查集
题意 小Q正在玩一个叠塔的游戏,游戏的目标是叠出尽可能高的塔.在游戏中,一共有n张矩形卡片,其中第i张卡片的长度为a_i,宽度为b_i.小Q需要把所有卡片按一定顺序叠成一座塔,要求对于任意一个矩形,它 ...
- 【加权并查集】bzoj 4602 齿轮
立志用最少的代码做最高效的表达 Description 现有一个传动系统,包含了N个组合齿轮和M个链条.每一个链条连接了两个组合齿轮u和v,并提供了一个传动比x : y.即如果只考虑这两个组合齿轮,编 ...
- Zjnu Stadium HDU - 304 加权并查集
题意: 观众席围成一圈.列的总数是300,编号为1–300,顺时针计数,我们假设行的数量是无限的.将有N个人去那里.他对这些座位提出了要求:这意味着编号A的顺时针X距离坐着编号B.例如:A在第4列,X ...
- bzoj 3362: [Usaco2004 Feb]Navigation Nightmare 导航噩梦(加权并查集)
3362: [Usaco2004 Feb]Navigation Nightmare 导航噩梦 Time Limit: 10 Sec Memory Limit: 128 MB Submit: 121 ...
- 【并查集】noi2001食物链
P2024 [NOI2001]食物链 //这是一道比我年纪大的题啊啊啊啊啊QAQ 加权并查集 三倍并查集好厉害qwq 图源洛谷题解 贴代码qwq 1 #include<cstdio> 2 ...
- 【高级数据结构其一·并查集】
用于快速处理不相交集合的查询和合并问题 经典应用:连通子图,最小生成树Kruskal,最近公共祖先 #初始化 n=int(input()) s=[i for i in range(n+1)]#查询 d ...
- 并查集(加权规则、折叠规则)
1.基本知识概念 等价类与并查集.如果用符号"="表示集合上的等价关系,那么对于该集合中的任意对象x,y,z,下列性质成立 : 自反性:x=x(即等于自身) 对称性:若x=y,则y ...
最新文章
- 需要恢复中断状态的一个场景
- java 批量验证_正则表达式批量验证函数
- 外卖匹配系统_歧视外卖员的北京SKP是个什么东西?
- 我是如何查找RFC官方资料的
- sql server 锁定_如何使用SQL Server 2014托管锁定优先级控制在线索引重建锁定
- SQL Server where和having区别
- shopnc数据库 批量修改商品价格
- MySQL 复习笔记
- AutoJs学习-自动添加微信群好友
- ad中按钮开关的符号_收藏:电路图形符号大全!!!
- 鼠标失灵,但鼠标和USB接口都是好的的情况。
- 无线移动通信技术快速发展历程和趋向(转)
- BZOJ2818 Gcd
- html跳转到关注的微信公众号,手机浏览器一键跳转微信公众号关注的方法
- 如何开发一款电商app小程序
- ffmpeg源码简析(十)libswscale中的SwsContext,sws_scale()
- Kafka配置动态SASL_SCRAM认证
- ppc64le处理器国产power8服务器CentOS7.2安装open-jdk
- 机械键盘连击问题的软件解决方案
- 逛InfoComm China 2019 必打卡展位之“亿联网络”