关键词:
题意:1~N个龙珠,放在1~N个城市,有两种操作:T A B 将A所再城市的所有球转移到B所在的城市。 Q X 询问X所在的城市pls,该城市中龙珠数量nm,以及龙珠转移次数trs
题解:并查集模板题,顺带更新一些数据。pls不必更新,因为X所在的集和的根即为城市编号。nm只需在union时将A集合根的nm加到B集合根的nm上,最后输出根的nm。trs则是在每次T中对根++(暂时将操作存在根上),在下次find时,如果某个儿子换根了就更新下去,。。。
ac
#define _CRT_SECURE_NO_WARNINGS #include<iostream> #include<stdio.h> #include<string> using namespace std; const int maxn = 1e4 + 5; struct ball int fa,trs, nm;//place,total num,trans time b[maxn]; int find(int x) if (b[x].fa == x)return x; else int tmp = b[x].fa; b[x]. fa = find(b[x].fa); b[x].trs += b[tmp].trs; return b[x].fa; ; void un(int x, int y) int xx = find(x); int yy = find(y); if (xx != yy) b[xx].fa = yy; b[yy].nm += b[xx].nm; b[xx].trs++; ; int main() int t; cin >> t; for (int k = 1; k <= t; k++) printf("Case %d:\n", k); int n, q; cin >> n >> q; for (int i = 1; i <= n; i++) b[i].nm = 1, b[i].trs= 0,b[i].fa=i; for (int i = 1; i <= q; i++) char c[5]; scanf("%s", c); if (c[0] == ‘T‘) int x, y; scanf("%d%d", &x, &y); un(x, y); else int x; scanf("%d", &x); int xx = find(x); printf("%d %d %d\n",xx, b[xx].nm, b[x].trs);
hdu3635dragonballs(带权并查集)
题目地址:pid=3635">HDU3635加权并查集水题。用num数组维护该城市有多少龙珠,用times数组维护每一个龙珠运输了多少次。num数组在合并的时候维护。times数组因为每一个都不一样。所以要在找根的时候递归来所有维护。终于,x龙... 查看详情
hdu3635dragonballs(带权并查集)(代码片段)
DragonBallsTimeLimit:2000/1000MS(Java/Others) MemoryLimit:32768/32768K(Java/Others)TotalSubmission(s):10628 AcceptedSubmission(s):3802ProblemDescriptionFivehundredyearslater,thenumberofdragonballswillincreaseunexpectedly,soit‘stoodifficultforMonkeyKing... 查看详情
hdu-3635dragonballs并查集(代码片段)
题意:1~N个龙珠,放在1~N个城市,有两种操作:TAB将A所再城市的所有球转移到B所在的城市。QX询问X所在的城市pls,该城市中龙珠数量nm,以及龙珠转移次数trs题解:并查集模板题,顺带更新一些数据。pls不必更新,因为X所在的... 查看详情
hdu3635dragonballs
DragonBallsTimeLimit:2000/1000MS(Java/Others) MemoryLimit:32768/32768K(Java/Others)TotalSubmission(s):4165 AcceptedSubmission(s):1603ProblemDescriptionFiv 查看详情
并查集(代码片段)
...集还没有深刻的理解吧 Fivehundredyearslater,thenumberofdragonballswillincreaseunexpectedly,soit‘stoodifficultforMonkeyKing(WuKong)togatherallofthedragonballstogether.五百年后,龙珠的数量会出乎意料地增加,所以悟空很难把所有的龙珠聚集在一起。H... 查看详情
hdu3635(代码片段)
/*一开始第a个球在第a个城市操作Tab,把第a个球所在城市的所有球移到b所在的城市操作Qa要求输出第a个球在哪个城市第a个球所在的城市有几个球第a个球移动次数*/#include<iostream>#include<cstring>#include<cstdio>#definemovemovee#... 查看详情
数据结构----并查集(代码片段)
并查集并查集概念并查集的模拟实现模拟实现并查集优化Union优化压缩路径循环递归并查集例题并查集概念并查集在一些应用问题中,需要将n个不同的元素划分成一些不相交的集合。开始时,每个元素自成一个单元素集... 查看详情
并查集p3367模板并查集(代码片段)
P3367【模板】并查集#include<iostream>#include<algorithm>#include<cstdio>#include<cstring>#include<cmath>#include<cstdlib>usingnamespacestd;intn,m,zi,xi,yi;intfather[10001] 查看详情
关于并查集的一切全在这里了(代码片段)
文章目录并查集初识「并查集」常用术语「并查集」基本思想「并查集」的两个实现方式QuickFind方式实现并查集QuickFind工作原理:代码实现与验证时间复杂度QuickUnion方式实现并查集QuickUnion的工作原理为什么QuickUnion比QuickFind... 查看详情
并查集
带偏移量的并查集讲解Butterfly AC代码 第二种AC代码1182:食物链 AC代码 查看详情
并查集——新手学习记录(代码片段)
好吧,什么垃圾并查集,并查集什么的都是铁憨憨<+__+>现在开始复习回忆:(新手,有错误望指正)什么叫做并查集,并查集就是一个集合问题,其实最主要的就是知道并查集是一个求解集合数目的问题,具体的操作方法有... 查看详情
并查集(代码片段)
主要内容本文主要记录并查集的基本实现方法,并逐步将一些例题填充到文章中。并查集能做什么并查集可以:1.合并集合2.查找两个元素是否在同一个集合内3.集合数量4.确定元素属于哪个集合。完整代码示例classUFpublic:UF();UF(int... 查看详情
并查集原理分析(代码片段)
文章目录1.并查集是什么2.并查集性质3.并查集可以解决的问题4.并查集模板5.并查集的应用1.并查集是什么在一些应用问题中,需要将n个不同的元素划分成一些不相交的集合。开始时**,每个元素自成一个单元素集合**... 查看详情
数据结构--并查集(代码片段)
并查集并查集原理并查集实现并查集原理在一些应用问题中,需要将n个不同的元素划分成一些不相交的集合。开始时,每个元素自成一个单元素集合,然后按一定的规律将归于同一组元素的集合合并。在此过程中要... 查看详情
数据结构----并查集(代码片段)
并查集并查集概念并查集的模拟实现模拟实现并查集优化Union优化压缩路径循环递归(深度过深有栈溢出的风险)并查集例题并查集概念并查集在一些应用问题中,需要将n个不同的元素划分成一些不相交的集合。开始时,每... 查看详情
树的应用——并查集及实现代码(代码片段)
文章目录什么是并查集亲戚问题并查集的实现改进——路径压缩进一步改进——合并并查集的用途什么是并查集 并查集是一种树型的数据结构,用于处理一些不相交集合(disjointsets)的合并及查询问题。常常在使用... 查看详情
并查集(代码片段)
本文参考了【算法】并查集(DisjointSet)和并查集详解并查集原理并查集是一种用于处理不相交集合之间合并问题的数据结构,例如求连通子图、判断是否存在环、求最小生成树等。以判断图中是否有环为例,下图是一个无向图... 查看详情