bzoj3376/poj1988[Usaco2004 Open]Cube Stacking 方块游戏 — 带权并查集
题目链接:http://www.lydsy.com/JudgeOnline/problem.php?id=3376
题目大意:
编号为1到n的n(1≤n≤30000)个方块正放在地上.每个构成一个立方柱.
有P(1≤P≤100000)个指令.指令有两种:
1.移动(M):将包含X的立方柱移动到包含Y的立方柱上.
2.统计(C):统计名含X的立方柱中,在X下方的方块数目.
题解:
带权并查集
存三个东西,x所在立方柱的最顶端fa[x],x所在立方柱的最底端d[x],x上面有多少个立方柱f[x](下面的图画错了不包含x qwq..画的时候一点感觉都没有)。
那么要求的x下方的数目就可以用f[d[x]]-f[x]来表示。
/*
题意:
n块积木,m个操作或询问。每次移动积木的时候,约翰会选择两块积木X,Y,把X搬到Y的上方。如果X已经和其它积
木叠在一起了,那么应将这叠积木整体移动到Y的上方;如果Y已经和其它积木叠在一起了的,假设在Y上方最高处的
积木为Z,那么应将X所在的那叠积木移动到Z的上方。每次询问当前时刻,某一块积木的下方有多少块积木。
n,m<=10^5
输入第一行 一个整数m,接下来m行,每行命令的格式为: 操作 x y ( M 为合并操作,C为查询 ) 题解:
带权并查集。
对于每个点x,维护当前所在并查集(也就是这一堆积木中)最下方的积木low[x],最上方的积木fa[x],
x到最上方积木的距离dist[x],则下方的积木数=dist[low[x]]-dist[x]。
带权并查集其实就是在Findfa的时候顺便维护一些权值。
*/
#include<cstdio>
#include<cstring> const int maxn=30000;
int fa[maxn],low[maxn],dist[maxn],N,M; int Findfa(int x)
{
if(fa[x]!=x)
{
int y=fa[x];
fa[x]=Findfa(fa[x]);
low[x]=low[y];
dist[x]=dist[x]+dist[y]; // x上方木块数=原x积木堆上方的木块数 + Findfa更新后原积木堆x祖先y上方木块数
}
return fa[x];
} int main()
{
for(int i=1;i<=maxn;++i) fa[i]=i,low[i]=i,dist[i]=0; // 并查集初始化
scanf("%d",&M);
char op[5];
int x,y;
while(M>0)
{
M--;
scanf("%s",&op);
if(op[0]=='M') //把 x放到y上
{
scanf("%d%d",&x,&y);
int fx=Findfa(x),fy=Findfa(y);
fa[fy]=fx;
dist[fy]=dist[low[fx]]+1;
low[fx]=low[fy];
Findfa(fy); // 并查集路径压缩,更新之前积木堆y中的积木最上方的积木编号
}
else
{
scanf("%d",&x);
int t=Findfa(x);
int d=low[t];
Findfa(d); // 路径压缩,更新
printf("%d\n",dist[d]-dist[x]);
}
}
return 0;
}
bzoj3376/poj1988[Usaco2004 Open]Cube Stacking 方块游戏 — 带权并查集的更多相关文章
- 【BZOJ 3376】[Usaco2004 Open]Cube Stacking 方块游戏 带权并查集
这道题一开始以为是平衡树结果发现复杂度过不去,然后发现我们一直合并而且只是记录到最低的距离,那么就是带权并查集了,带权并查集的权一般是到根的距离,因为不算根要好打,不过还有一些其他的,具体的具体打. ...
- BZOJ 3376 [Usaco2004 Open]Cube Stacking 方块游戏(带权并查集)
题解 #include<iostream> #include<cstring> #include<cstdio> #include<cmath> #in ...
- 洛谷P5092 [USACO2004OPEN]Cube Stacking 方块游戏 (带权并查集)
题目描述 约翰和贝茜在玩一个方块游戏.编号为 1\ldots n 1-n 的 n n ( 1 \leq n \leq 30000 1≤n≤30000 )个方块正放在地上,每个构成一个立方柱. 游戏开始 ...
- 【poj 1988】Cube Stacking(图论--带权并查集)
题意:有N个方块,M个操作{"C x":查询方块x上的方块数:"M x y":移动方块x所在的整个方块堆到方块y所在的整个方块堆之上}.输出相应的答案. 解法: ...
- bzoj 3376 [Usaco2004 Open]Cube Stacking 方块游戏——带偏移量的并查集
题目:https://www.lydsy.com/JudgeOnline/problem.php?id=3376 带偏移量的并查集. #include<iostream> #include ...
- [Usaco2004 Open]Cube Stacking 方块游戏
题面: 约翰和贝茜在玩一个方块游戏.编号为1到n的n(1≤n≤30000)个方块正放在地上.每个构成一个立方柱. 游戏开始后,约翰会给贝茜发出P(1≤P≤100000)个指令.指令有两种 ...
- BZOJ3376: [Usaco2004 Open]Cube Stacking 方块游戏
[传送门:BZOJ3376] 简要题意: 约翰和贝茜在玩一个方块游戏.编号为1到n的n(1≤n≤30000)个方块正放在地上.每个构成一个立方柱. 游戏开始后,约翰会给贝茜发出P(1≤P≤100000 ...
- 初涉「带权并查集」&&bzoj3376: [Usaco2004 Open]Cube Stacking 方块游戏
算是挺基础的东西 Description 约翰和贝茜在玩一个方块游戏.编号为1到n的n(1≤n≤30000)个方块正放在地上.每个构成一个立方柱. 游戏开始后,约翰会给贝茜发出P(1≤P ...
- Cogs 1070. [焦作一中2012] 玻璃球游戏 带权并查集,逆序处理
题目: http://cojs.tk/cogs/problem/problem.php?pid=1070 1070. [焦作一中2012] 玻璃球游戏 ★ 输入文件:marbles.in 输出 ...
随机推荐
- 3月9日(用 DBHelper 工具连接 mysql 数据库 实现登录验证)
一. 用DBHelper 与mysql 连接 实现最简单的登录验证. (1)新建 web project ----->选择src导入 DBHelper 工具包-------->选择web ...
- file /usr/share/mysql/charsets/README from install of MySQL-server-5.1.73-1.glibc23.i386 conflicts with file from package mysql-libs-5.1.73-8.el6_8.i686
1:也许之前的机器安装过Mysql,但是自己不知道,账号密码也忘记了,又执行安装操作,导致Mysql不兼容问题.Linux上安装MySQL时出现不兼容的解决办法,错误如下所示: [root@maste ...
- snmp对超过16T的磁盘大小识别不对的解决办法
https://blog.csdn.net/redleaf0000/article/details/38303299
- 无法创建链接服务器 "ORCL" 的 OLE DB 访问接口 "OraOLEDB.Oracle" 的实例 (错误:7302)
原文:https://www.cnblogs.com/tiger2soft/p/6954308.html 在sqlserver中创建oracle的链接服务器时,提示此错误. 按照网上的方案,先后使用了 ...
- [ZJOI2006]皇帝的烦恼
题解: 具有单调性的题目还是要多想想二分答案 不二分答案暴力dp是n^3的 非常不优秀 二分答案之后就比较好做 mx[i],nx[i]表示最多/最少几个与a[1]相同 代码: #include < ...
- python全栈开发day67--字段类型、字段属性、ORM回顾
一.回顾总结 https://www.cnblogs.com/maple-shaw/articles/9323320.html 1. 视图 1. CBV 和 FBV from django.views ...
- 执行shell脚本提示“-bash: ./checkP.sh: /bin/sh^M: bad interpreter: No such file or directory”解决方法
在windows机器下新建了一个shell脚本如下
- BZOJ3295 [Cqoi2011]动态逆序对 分治 树状数组
原文链接http://www.cnblogs.com/zhouzhendong/p/8678185.html 题目传送门 - BZOJ3295 题意 对于序列$A$,它的逆序对数定义为满足$i< ...
- JavaSE | IO流
java.io.File类(文件和目录路径名的抽象表示形式) 如果希望在程序中操作文件和目录都可以通过File类来完成,File类能新建.删除.重命名文件和目录. File类是文件或目录的路径,而不是 ...
- Sleep,Hibernate and Hybrid
Sleep is a power-saving state that allows a computer to quickly resume full-power operation (typical ...