题目描述

约翰和贝茜在玩一个方块游戏。编号为 1\ldots n 1…n 的 n n ( 1 \leq n \leq 30000 1≤n≤30000 )个方块正放在地上,每个构成一个立方柱。

游戏开始后,约翰会给贝茜发出 P (1≤P≤100000 )个指令。指令有两种:

移动(M):将包含X的立方柱移动到包含Y的立方柱上。

统计(C):统计含X的立方柱中,在X下方的方块数目。

写个程序帮贝茜完成游戏。

输入输出格式

输入格式:

第1行输入 P ,之后 P 行每行输入一条指令,形式为“M X Y”或者“C X”。

输入保证不会有将立方柱放在自己头上的指令。

输出格式:

输出共 P 行,对于每个统计指令,输出其结果。

输入输出样例

输入样例#1:

6

M 1 6

C 1

M 2 4

M 2 6

C 3

C 4

输出样例#1:

1

0

2


这个作为带权并查集的模板,来复习一下。

#include <bits/stdc++.h>
#define int long long
using namespace std;
const int N = 1200000;
int n, fa[N], dis[N], siz[N], x, y;
char opt;
int find(int x) {
if (fa[x] == x)
return x;
int which = find(fa[x]);
dis[x] += dis[fa[x]];
fa[x] = which;
return which;
}
signed main() {
cin >> n;
for (int i = 1; i <= 30000; i++) {
fa[i]=i;
siz[i] = 1;
}
while (n--) {
cin >> opt;
if (opt == 'M') {
cin >> x >> y;
int xx=find(x),yy=find(y);
fa[xx]=yy;
dis[xx] += siz[yy];
siz[yy] += siz[xx];
} else if (opt == 'C') {
cin >> x;
find(x);
cout << dis[x] << '\n';
}
}
return 0;
}

洛谷P5092 [USACO2004OPEN]Cube Stacking 方块游戏 (带权并查集)的更多相关文章

  1. bzoj3376/poj1988[Usaco2004 Open]Cube Stacking 方块游戏 — 带权并查集

    题目链接:http://www.lydsy.com/JudgeOnline/problem.php?id=3376 题目大意: 编号为1到n的n(1≤n≤30000)个方块正放在地上.每个构成一个立方 ...

  2. 【BZOJ 3376】[Usaco2004 Open]Cube Stacking 方块游戏 带权并查集

    这道题一开始以为是平衡树结果发现复杂度过不去,然后发现我们一直合并而且只是记录到最低的距离,那么就是带权并查集了,带权并查集的权一般是到根的距离,因为不算根要好打,不过还有一些其他的,具体的具体打. ...

  3. BZOJ 3376 [Usaco2004 Open]Cube Stacking 方块游戏(带权并查集)

    题解 #include<iostream> #include<cstring> #include<cstdio> #include<cmath> #in ...

  4. Bzoj1202/洛谷P2294 [HNOI2005]狡猾的商人(带权并查集/差分约束系统)

    题面 Bzoj 洛谷 题解 考虑带权并查集,设\(f[i]\)表示\(i\)的父亲(\(\forall f[i]<i\)),\(sum[i]\)表示\(\sum\limits_{j=fa[i]} ...

  5. 【poj 1988】Cube Stacking(图论--带权并查集)

    题意:有N个方块,M个操作{"C x":查询方块x上的方块数:"M x y":移动方块x所在的整个方块堆到方块y所在的整个方块堆之上}.输出相应的答案. 解法: ...

  6. 【洛谷】P1196 [NOI2002]银河英雄传说【带权并查集】

    P1196 [NOI2002]银河英雄传说 题目描述 公元五八○一年,地球居民迁至金牛座α第二行星,在那里发表银河联邦创立宣言,同年改元为宇宙历元年,并开始向银河系深处拓展. 宇宙历七九九年,银河系的 ...

  7. Cogs 1070. [焦作一中2012] 玻璃球游戏 带权并查集,逆序处理

    题目: http://cojs.tk/cogs/problem/problem.php?pid=1070 1070. [焦作一中2012] 玻璃球游戏 ★   输入文件:marbles.in   输出 ...

  8. CDOJ 1070 秋实大哥打游戏 带权并查集

    链接 F - 秋实大哥打游戏 Time Limit:1000MS     Memory Limit:65535KB     64bit IO Format:%lld & %llu Submit ...

  9. AcWing 239.奇偶游戏 (带权并查集/种类并查集)

    题意:你和朋友玩游戏,有个一\(01\)序列,你每次给出一个区间,朋友会回答这个区间中的\(1\)的个数是奇数还是偶数,但是你亲爱的朋友可能在撒谎,问在哪个询问你能确定你的朋友在撒谎,输出回合数. 题 ...

随机推荐

  1. 记一次网络故障——pod间无法通信

    一.背景 集群是二进制部署 部署完成后一起正常,各种资源对象均可正常创建. 部署应用后发现无法跨节点通信,且pod的ip都是172.17.0.0段的 二.排查过程层 查看节点路由,发现docker0网 ...

  2. Laravel文档工具

    laravel-doc ⛵laravel-doc 是一个用来生成文档,通过markdown来撰写文档,并提供web访问文档的项目 安装要求 PHP >= 7.0.0 Laravel >= ...

  3. [转帖]kubernetes 常见问题整理

    kubernetes 常见问题整理 https://www.cnblogs.com/qingfeng2010/p/10642408.html 使用kubectl 命令报错 报错: [root@k8s- ...

  4. Java的多路分支代码,感觉有点意思

    /** * @Author hty * @Date 2019-12-16 16:39 * @Version 1.0 */ import java.util.Random; // 比赛结果 enum O ...

  5. - Git常用命令 基础 总结 MD

    目录 目录 Git常用命令 帮助 help 常用操作 初始化 clone init 提交 push 暂存 更新 撤销修改 分支 branch 查看分支 创建分支 切换分支 checkout 删除分支 ...

  6. ML学习笔记之Jupyter Notebook各种使用方法

    0x00 概述 Jupyter Notebook安装的官方网站 安装Jupyter Notebook的先决条件:已经安装了python(python 2.7 或者是python3) 具体的安装方法: ...

  7. C#生成唯一不重复订单号帮助类

    1.使用场景 通常,在做一些表单的功能时,需要生成唯一不重复的订单单号,本文提供的帮助类可以适合大多数场景的单号生成使用,拿来即用,方便快捷无重复.而且,在高并发的情况下也是可以使用的. 之前看到有人 ...

  8. python 面向对象编程、获取对象信息

    面向对象与面向过程 参考链接:https://www.liaoxuefeng.com/wiki/0014316089557264a6b348958f449949df42a6d3a2e542c000/0 ...

  9. 正则表达式回溯导致的CPU打满

    参考: https://my.oschina.net/ttscjr/blog/2208526 https://mp.weixin.qq.com/s?__biz=MzA4MjIyNTY0MQ==& ...

  10. Python与Golang对比

    一:前言 刚看了一篇软文,说什么“才华是改变人生最有效的途径”,反正呢,大体就是科技进步,要想一直在车上,就得不断的学习,刚好最近也准备学习Golang,最近火的不能在火了吧,刚好也有些Python基 ...