[HDOJ2818]Building Block(带权并查集,路径压缩)
题目链接:http://acm.hdu.edu.cn/showproblem.php?pid=2818
题意:有N个块,每次有两个操作:
M x y表示把x所在的那一堆全部移到y所在的那一堆的下方。
C x 询问在x下方有多少个方块。
用并查集,在路径压缩的时候后序更新当前块下有多少个其他块,注意这里“当前块下”其实和并查集是相反的,也就是父亲节点在儿子下面。
需要额外维护一个量:某一堆的块的总数,这个在unite操作的时候,如果不是同一个根,直接将一部分加到另一部分上就可以。
- /*
- ━━━━━┒ギリギリ♂ eye!
- ┓┏┓┏┓┃キリキリ♂ mind!
- ┛┗┛┗┛┃\○/
- ┓┏┓┏┓┃ /
- ┛┗┛┗┛┃ノ)
- ┓┏┓┏┓┃
- ┛┗┛┗┛┃
- ┓┏┓┏┓┃
- ┛┗┛┗┛┃
- ┓┏┓┏┓┃
- ┛┗┛┗┛┃
- ┓┏┓┏┓┃
- ┃┃┃┃┃┃
- ┻┻┻┻┻┻
- */
- #include <algorithm>
- #include <iostream>
- #include <iomanip>
- #include <cstring>
- #include <climits>
- #include <complex>
- #include <fstream>
- #include <cassert>
- #include <cstdio>
- #include <bitset>
- #include <vector>
- #include <deque>
- #include <queue>
- #include <stack>
- #include <ctime>
- #include <set>
- #include <map>
- #include <cmath>
- using namespace std;
- #define fr first
- #define sc second
- #define cl clear
- #define BUG puts("here!!!")
- #define W(a) while(a--)
- #define pb(a) push_back(a)
- #define Rint(a) scanf("%d", &a)
- #define Rll(a) scanf("%lld", &a)
- #define Rs(a) scanf("%s", a)
- #define Cin(a) cin >> a
- #define FRead() freopen("in", "r", stdin)
- #define FWrite() freopen("out", "w", stdout)
- #define Rep(i, len) for(int i = 0; i < (len); i++)
- #define For(i, a, len) for(int i = (a); i < (len); i++)
- #define Cls(a) memset((a), 0, sizeof(a))
- #define Clr(a, x) memset((a), (x), sizeof(a))
- #define Full(a) memset((a), 0x7f7f, sizeof(a))
- #define lrt rt << 1
- #define rrt rt << 1 | 1
- #define pi 3.14159265359
- #define RT return
- #define lowbit(x) x & (-x)
- #define onenum(x) __builtin_popcount(x)
- typedef long long LL;
- typedef long double LD;
- typedef unsigned long long ULL;
- typedef pair<int, int> pii;
- typedef pair<string, int> psi;
- typedef map<string, int> msi;
- typedef vector<int> vi;
- typedef vector<LL> vl;
- typedef vector<vl> vvl;
- typedef vector<bool> vb;
- const int maxn = ;
- int pre[maxn];
- int under[maxn];
- int num[maxn];
- int p;
- int find(int x) {
- if(x == pre[x]) RT x;
- int px = pre[x];
- pre[x] = find(pre[x]);
- under[x] += under[px];
- RT pre[x];
- }
- void unite(int x, int y) {
- int fx = find(x);
- int fy = find(y);
- if(fx != fy) {
- under[fx] = num[fy];
- num[fy] += num[fx];
- pre[fx] = fy;
- }
- }
- int main() {
- // FRead();
- char cmd[];
- int u, v;
- while(~Rint(p)) {
- Cls(under);
- Rep(i, maxn) {
- pre[i] = i;
- num[i] = ;
- }
- W(p) {
- Rs(cmd);
- if(cmd[] == 'M') {
- Rint(u); Rint(v);
- unite(u, v);
- }
- if(cmd[] == 'C') {
- Rint(u); find(u);
- printf("%d\n", under[u]);
- }
- }
- }
- RT ;
- }
[HDOJ2818]Building Block(带权并查集,路径压缩)的更多相关文章
- hdu 2818 Building Block (带权并查集,很优美的题目)
Problem Description John are playing with blocks. There are N blocks ( <= N <= ) numbered ...N ...
- Never Wait for Weights(带权并查集+路径压缩)
题目链接:http://acm.sdibt.edu.cn/vjudge/contest/view.action?cid=2209#problem/F !a b w 表示b比a大w ? a b 输出 ...
- POJ 1703 Find them, Catch them(带权并查集)
传送门 Find them, Catch them Time Limit: 1000MS Memory Limit: 10000K Total Submissions: 42463 Accep ...
- [NOIP摸你赛]Hzwer的陨石(带权并查集)
题目描述: 经过不懈的努力,Hzwer召唤了很多陨石.已知Hzwer的地图上共有n个区域,且一开始的时候第i个陨石掉在了第i个区域.有电力喷射背包的ndsf很自豪,他认为搬陨石很容易,所以他将一些区域 ...
- poj1417 带权并查集 + 背包 + 记录路径
True Liars Time Limit: 1000MS Memory Limit: 10000K Total Submissions: 2713 Accepted: 868 Descrip ...
- poj1984 带权并查集(向量处理)
Navigation Nightmare Time Limit: 2000MS Memory Limit: 30000K Total Submissions: 5939 Accepted: 2 ...
- 【BZOJ-4690】Never Wait For Weights 带权并查集
4690: Never Wait for Weights Time Limit: 15 Sec Memory Limit: 256 MBSubmit: 88 Solved: 41[Submit][ ...
- hdu3038(带权并查集)
题目链接: http://acm.split.hdu.edu.cn/showproblem.php?pid=3038 题意: n表示有一个长度为n的数组, 接下来有m行形如x, y, d的输入, 表示 ...
- 洛谷OJ P1196 银河英雄传说(带权并查集)
题目描述 公元五八○一年,地球居民迁移至金牛座α第二行星,在那里发表银河联邦 创立宣言,同年改元为宇宙历元年,并开始向银河系深处拓展. 宇宙历七九九年,银河系的两大军事集团在巴米利恩星域爆发战争.泰山 ...
- poj1984 带权并查集
题意:有多个点,在平面上位于坐标点上,给出一些关系,表示某个点在某个点的正东/西/南/北方向多少距离,然后给出一系列询问,表示在第几个关系给出后询问某两点的曼哈顿距离,或者未知则输出-1. 只要在元素 ...
随机推荐
- 关于WP8 微信分享的补充说明
1.根据微信官方Demo完成相应功能. 2.在分享完后,从微信回来,需要进行 快速恢复. 3.在快速恢复中加入 RootFrame.Navigating += HandlerFotResetNavig ...
- Struts之ForwardAction
在Struts中,通过action跳转jsp,但是有时希望仅仅只是跳转页面,而不需要action,这时可以用ForwardAction. 定义一个仅仅是跳转的ForwardAction如下: < ...
- android 开发上传图片遇到返回 FileNotFoundException
目的:带有参数上传图片 环境:客户端开发 android studio ,服务器端:visual studio 2012 (c# asp.net) ************************* ...
- 仅仅测试Word2016发布博客
我来啦! 我走啦! 哈哈哈! int main(int argc, char *argv[]) { int mysocket; //建立一个socket后返回的值是int类型的. ...
- 【BZOJ】【1086】 【SCOI2005】王室联邦
树分块 orz vfk && PoPoQQQ http://vfleaking.blog.163.com/blog/static/174807634201231684436977/ h ...
- sampler2d
Here is the syntax for a sampler in Direct3D 9. sampler Name = SamplerType{ Texture = <texture_ ...
- synergy--共享你的键鼠
synergy用来分享一套键鼠,作用于多台主机.可作用于linux.Windows和mac平台.工作方式是:将一台主机作为服务器端,然后服务器端将会分享自己的键鼠,另一台主机作为客户端连接服务端就可以 ...
- eclipse 开发技巧
1. ctrl+shift+r:打开资源 这可能是所有快捷键组合中最省时间的了.这组快捷键可以让你打开你的工作区中任何一个文件,而你只需要按下文件名或mask名中的前几个字母,比如applic*.xm ...
- 【redis】05Redis的常用命令及高级应用
Redis常用命令 Redis提供了非常丰富的命令,对数据库和个中数据类型进行操作, 这些命令呢,可以在Linux终端使用. 分为两大类的命令,一种是键值相关的命令,一种是服务器相关的命令, ...
- 使用Flexible实现手淘H5页面的终端适配【转】
曾几何时为了兼容IE低版本浏览器而头痛,以为到Mobile时代可以跟这些麻烦说拜拜.可没想到到了移动时代,为了处理各终端的适配而乱了手脚.对于混迹各社区的偶,时常发现大家拿手机淘宝的H5页面做讨论—— ...