[US Open 2004][luogu2342] 叠积木 [带权并查集]
题面
思路
害
学了4年多OI,第一次知道还有带权并查集这个东西
wtcl
这个玩意儿的原理和详细实现,可以参考这个博客:带权并查集传送门
这道题,就是在带权并查集的基础上,加个维护每个集合的大小。
并查集往每堆积木的底部那个上面合并(也就是根是最底下的积木),合并的时候把儿子的value设定成父亲的size即可
Code
#include<iostream>
#include<cstring>
#include<algorithm>
#include<cstdio>
#include<cmath>
#include<cassert>
#define ll long long
using namespace std;
inline int read(){
	int re=0,flag=1;char ch=getchar();
	while(ch>'9'||ch<'0'){
		if(ch=='-') flag=-1;
		ch=getchar();
	}
	while(ch>='0'&&ch<='9') re=(re<<1)+(re<<3)+ch-'0',ch=getchar();
	return re*flag;
}
int n=30000,m,f[100010],siz[100010],val[100010];
inline int find(int x){//带权并查集的路径压缩+权值维护
	if(x==f[x]) return x;
	int tmp=f[x];
	f[x]=find(f[x]);
	val[x]+=val[tmp];
	return f[x];
}
int main(){
	m=read();int i;
	char s[10];int t1,t2,x,y;
	for(i=1;i<=n;i++) f[i]=i,siz[i]=1,val[i]=0;
	while(m--){
		scanf("%s",s);
		if(s[0]=='M'){
			t1=read();t2=read();
			x=find(t1);
			y=find(t2);
			f[x]=y;//合并到底部
			val[x]=siz[y];//权值和集合大小的关系
			siz[y]+=siz[x];
		}
		else{
			t1=read();
			x=find(t1);
			printf("%d\n",val[t1]);
		}
	}
}
[US Open 2004][luogu2342] 叠积木 [带权并查集]的更多相关文章
- bzoj3376/poj1988[Usaco2004 Open]Cube Stacking 方块游戏 — 带权并查集
		题目链接:http://www.lydsy.com/JudgeOnline/problem.php?id=3376 题目大意: 编号为1到n的n(1≤n≤30000)个方块正放在地上.每个构成一个立方 ... 
- 【bzoj3376-方块游戏】带权并查集
		题意: n块积木,m个操作或询问.每次移动积木的时候,约翰会选择两块积木X,Y,把X搬到Y的上方.如果X已经和其它积木叠在一起了,那么应将这叠积木整体移动到Y的上方:如果Y已经和其它积木叠在一起了的, ... 
- 洛谷OJ P1196 银河英雄传说(带权并查集)
		题目描述 公元五八○一年,地球居民迁移至金牛座α第二行星,在那里发表银河联邦 创立宣言,同年改元为宇宙历元年,并开始向银河系深处拓展. 宇宙历七九九年,银河系的两大军事集团在巴米利恩星域爆发战争.泰山 ... 
- 【POJ 1984】Navigation Nightmare(带权并查集)
		Navigation Nightmare Description Farmer John's pastoral neighborhood has N farms (2 <= N <= 40 ... 
- 并查集——poj1988(带权并查集中等)
		一.题目回顾 题目链接:Cube Stacking 题意:有n个箱子,初始时每个箱子单独为一列:接下来有p行输入,M, x, y 或者 C, x: 对于M,x,y:表示将x箱子所在的一列箱子搬到y所在 ... 
- 浅谈并查集&种类并查集&带权并查集
		并查集&种类并查集&带权并查集 前言: 因为是学习记录,所以知识讲解+例题推荐+练习题解都是放在一起的qvq 目录 并查集基础知识 并查集基础题目 种类并查集知识 种类并查集题目 并查 ... 
- POJ1988(带权并查集,搬砖块)
		题意: 可以这样理解,有n快方形积木,一开始都是单独的放到哪,然后有两种操作 1 M a b 把a所在的那一堆落到b所在那一堆的上面(一开始自己是一堆) 2 C a 问a下面有多少个积木 ... 
- 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很自豪,他认为搬陨石很容易,所以他将一些区域 ... 
随机推荐
- 【概率论】6-1:大样本介绍(Large Random Samples Introduction)
			title: [概率论]6-1:大样本介绍(Large Random Samples Introduction) categories: - Mathematic - Probability keyw ... 
- 1045 Favorite Color Stripe (30)
			Eva is trying to make her own color stripe out of a given one. She would like to keep only her favor ... 
- warning insecure world writable dir ruby mode 040777,gem insstal sass error failed to build gem native extension
			//1.删除原gem源 gem sources --remove https://rubygems.org/ //2.添加国内镜像 gem source -a https://gems.ruby-ch ... 
- MySQL 常用字段类型与对应的Java类型
			varchar 不定长字符串 字符串或是没有合适类型时,可以选择它作为字段类型 对应Java中的String int bigint 数值 一般以int作为数字的默认选择,数值很大时使用bigint 对 ... 
- UDF-C_UDMI【转载】
			UDF定义变量的输出 使用宏: C_UDMI( c, thread, index) 自变量类型:cell_t c Thread *thread int index ... 
- text-align-last 实现文本居中对齐
			1.示例代码 <!DOCTYPE html> <html> <head> <meta charset="utf-8" /> < ... 
- Class as decorator in python
			Class as decorator in python . https://www.geeksforgeeks.org/class-as-decorator-in-python/ http://co ... 
- 从0开始学爬虫2之json的介绍和使用
			从0开始学爬虫2之json的介绍和使用 Json 一种轻量级的数据交换格式,通用,跨平台 键值对的集合,值的有序列表 类似于python中的dict Json中的键值如果是字符串一定要用双引号 jso ... 
- shell编程系列14--文本处理三剑客之awk的概述及常用方法总结
			shell编程系列14--文本处理三剑客之awk的概述及常用方法总结 awk是一个文本处理工具,通常用于处理数据并生成结果报告 awk的命名是它的创始人 Alfred Aho.Peter Weinbe ... 
- 【转载】     我的Machine Learning学习之路
			原文地址: https://www.cnblogs.com/steven-yang/p/5857964.html ------------------------------------------- ... 
